Mit dem folgenden Code habe ich versucht, vier Diagramme in einem Diagramm zu zeichnen R
. Ich bin mit der Abbildung nicht zufrieden, da zwischen den Darstellungen viel Platz ist und daher die Breite der Darstellungen nicht ausreicht, um die Darstellungen zu analysieren.
Könnte mir jemand helfen, eine schöne Grafik mit vier Plots zu erstellen?
Wie kann ich x-Achsenbeschriftungen von 1 bis 10 anstatt der Standardbeschriftungen von 5 beibehalten?
Daten:
a1: 11,013, 13,814, 13,831, 13,714, 13,787, 13,734, 13,778, 13,771, 13,823, 13,659
a2: 5,181 7,747 8,314 8,061 7,920 8,153 8,540 8,845 7,881 8,301
Ich habe a1-Daten für b1, c1 und d1 verwendet. a2 Daten für b2, c2 und d2 nur für hier.
Zahl:
Code:
op=par(mfrow=c(4,1), mar=c(5.5,5.1,4.1,2.1))
plot(a1, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="A")
lines(a2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
par(xpd=T)
legend(1,26.5,c("X","Y"),bty="n",horiz=T,cex=1.5,col=c("red1","darkblue"),text.col=c("red1","darkblue"),pch=c(1,3),lty=c(2,3),x.intersp=0.4,adj=0.2)
plot(b1, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="B")
lines(b2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
plot(c1, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="C")
lines(c2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
plot(d1/1000, type="b", ylim=c(0,14.5), xlab="Time (secs)", ylab="", cex.axis=1.4, cex.lab=1.3,cex=1.2,lwd=2.5,col="red1",lty=2,pch=1, main="D")
lines(d2,type="b",pch=3,lty=3,col="darkblue",lwd=2.5,cex=1.2)
> mtext("Price", side=2, at=100,line=3,cex=1.1)
r
data-visualization
Samarasa
quelle
quelle
Antworten:
Wenn Sie sich an die Methode halten möchten, die Sie verwendet haben, sollten Sie den Befehl layout () lernen. Ein paar weitere Detailänderungen und Sie können die Diagramme viel näher zusammen bekommen. Sie können auch die eindeutigen Elemente, die sich zwischen den Diagrammen ändern, in eine Liste einfügen (z. B. die Daten und Ränder) und dann eine Schleife durchlaufen. Sie werden auch feststellen, dass ich die untere Achse mit dem Befehl direct axis () erstellt habe, damit Sie steuern können, wohin die Elemente verschoben werden.
Ich sollte beachten, dass ich mir wirklich keine Mühe gegeben habe, dies so schön wie möglich zu gestalten, und statt dieses ersten Dummy-Diagramms hätte ich im ersten Frame einfach genug Platz einstellen können. Leider versucht die Einstellung mar (), den Rahmen auszufüllen, und der obere Rand beeinflusst den Abstand, den die Beschriftung über dem Diagramm aufweist, sodass ich alle meine Beschriftungen mit mtext () oder text () erstellen muss, anstatt nur zu verwenden die Haupteinstellung in der Handlung und ich hatte keine Lust, das zu tun
quelle
Ich würde empfehlen, das Gittergrafikpaket zu lernen. Mit ein paar Zeilen komme ich dem nahe, was Sie wollen. Packen Sie zunächst Ihre Daten in einen Datenrahmen, etwa so:
was ergibt:
Dann benutze Gitter
xyplot
:Das ergibt eine schöne Grafik wie:
BEARBEITEN:
Wenn Sie verschiedene Symbole und Linien haben möchten und diese in Ihrer Legende angezeigt werden sollen, wird dies kompliziert, da Sie die Legende buchstäblich selbst erstellen und wissen müssen, wie Sie die Standardgitterfarben erhalten, wenn Sie sie nicht selbst überschrieben haben :
EDIT 2:
Sie können den Code und das Diagramm vereinfachen, wenn die beiden Kategorien wirklich so einfach wie "X" und "Y" sind:
Hier werden "X" und "Y" als Punktsymbole verwendet. Sie brauchen überhaupt keine Legende und können dann den Diagrammen selbst noch mehr Platz widmen. (Auf der anderen Seite gefällt Ihnen das Aussehen möglicherweise nicht oder es fällt Ihnen schwerer, den genauen Mittelpunkt des Punkts zu bestimmen, obwohl dies möglicherweise kein so großes Problem darstellt, da die Linie durch jeden Punkt verläuft.)
EDIT 3:
Tatsächlich sollten Sie
strip=F, strip.left=T,
dem Plot die Bezeichnungen A, B, C, D links von den Diagrammen hinzufügen , um mehr Platz für ein langes Diagramm wie dieses zu haben:quelle
grid
Sache: Gitter und ggplot2 bauen auf Gitter auf). .Hier ist eine Version von @ Brandons
ggplot2
Lösung, die das gewünschte Legendenverhalten enthält:Ich finde Legenden viel einfacher
ggplot2
, aber YMMV.BEARBEITEN
Ein paar Fragen in den Kommentaren ansprechen. Um bestimmte Punkt- oder Linientypen anzugeben, verwenden Sie entweder ,
scale_aesthetic_manual
wo usw. Zum Beispiel:aesthetic
shape
linetype
Das Ändern der Größe verschiedener Achsenbeschriftungen erfolgt durch Ändern der Einstellungen im Thema, in der Regel mit
opts()
. Zum Beispiel:Sie sollten wirklich in die Website und sein Buch eintauchen, um weitere Informationen zu erhalten.
quelle
Ähnlich wie bei Waynes Antwort würde ich auch ein anderes Paket verwenden, nämlich
ggplot2
Was uns ein Diagramm gibt wie:
quelle
+ opts(panel.background=theme_blank())
theme_get()
zu sehen, was Sie ändern können. Folgen Sie dann dem gleichen Muster wie bei meinem letzten Kommentar und stellen Sie sie ein=theme_blank()
melt()