Ich möchte y1 und y2 im selben Plot zeichnen.
x <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
plot(x, y1, type = "l", col = "red")
plot(x, y2, type = "l", col = "green")
Aber wenn ich es so mache, werden sie nicht zusammen in derselben Handlung dargestellt.
In Matlab kann man das tun hold on
, aber weiß jemand, wie man das in R macht?
?curve
. Verwenden Sieadd=TRUE
.Antworten:
lines()
oderpoints()
fügt dem vorhandenen Diagramm hinzu, erstellt jedoch kein neues Fenster. Also müsstest du es tunquelle
plot(sin); curve(cos, add=TRUE)
.lines(x2,y2,...)
stattlines(x,y2,...)
Sie können auch
par
dasselbe Diagramm verwenden und auf einer anderen Achse zeichnen. Etwas wie folgt:Wenn Sie ausführlich über
par
in lesenR
, können Sie wirklich interessante Grafiken erstellen. Ein weiteres Buch ist Paul Murrels R Graphics.quelle
xlab="", ylab="", ...
und ein paar andere in die zweite aufnehmenplot
.Bei der Erstellung von mehrschichtigen Plots sollte das
ggplot
Paket berücksichtigt werden. Die Idee ist, ein grafisches Objekt mit grundlegender Ästhetik zu erstellen und es schrittweise zu verbessern.ggplot
Für den Stil müssen Daten gepackt werdendata.frame
.Grundlösung:
Hier
+ operator
werden zusätzliche Ebenen zum Basisobjekt hinzugefügt.Mit haben
ggplot
Sie Zugriff auf grafische Objekte in jeder Phase des Zeichnens. Angenommen, die übliche schrittweise Einrichtung kann folgendermaßen aussehen:g
Erzeugt das Diagramm und Sie können es in jeder Phase sehen (also nach dem Erstellen mindestens einer Ebene). Weitere Verzauberungen des Plots werden ebenfalls mit dem erstellten Objekt vorgenommen. Zum Beispiel können wir Beschriftungen für Achsen hinzufügen:Das Finale
g
sieht aus wie:UPDATE (08.11.2013):
Wie in den Kommentaren erwähnt,
ggplot
schlägt die Philosophie vor, Daten im Langformat zu verwenden. Sie können sich auf diese Antwort beziehen, um den entsprechenden Code anzuzeigen.quelle
ggplot
Dies ist natürlicher als das von Ihnen verwendete "breite" Format.ggplot
Philosophie passt ...Ich denke, dass die Antwort, die Sie suchen, lautet:
quelle
"add" is not a graphical parameter
Warnung und druckt dann nur den zweiten Plot über den ersten."add" is not a graphical parameter
. Mein R istR version 3.2.3 (2015-12-10)
. Sie können denpar(new=TRUE)
Befehl zwischen diesen Plots verwenden.Verwenden Sie die
matplot
Funktion:Verwenden Sie dies, wenn
y1
undy2
an denselbenx
Punkten ausgewertet werden. Es skaliert die Y-Achse so, dass sie zu dem passt, was größer (y1
odery2
) ist, im Gegensatz zu einigen anderen Antworten hier, die abgeschnitten werden,y2
wenn sie größer alsy1
(ggplot-Lösungen sind meistens damit einverstanden).Alternativ und wenn die beiden Linien nicht die gleichen x-Koordinaten haben, legen Sie die Achsengrenzen im ersten Diagramm fest und fügen Sie Folgendes hinzu:
Bin erstaunt, dass dieser Q 4 Jahre alt ist und niemand erwähnt hat
matplot
oderx/ylim
...quelle
tl; dr: Sie möchten
curve
(mitadd=TRUE
) oder verwendenlines
.Ich bin damit nicht einverstanden,
par(new=TRUE)
da dadurch Häkchen und Achsenbeschriftungen doppelt gedruckt werden. Z.BDie Ausgabe von
plot(sin); par(new=T); plot( function(x) x**2 )
.Schauen Sie, wie durcheinander die Beschriftungen der vertikalen Achse sind! Da die Bereiche unterschiedlich sind, müssten Sie einstellen
ylim=c(lowest point between the two functions, highest point between the two functions)
, was weniger einfach ist als das, was ich Ihnen zeigen werde - und viel weniger einfach, wenn Sie nicht nur zwei, sondern viele Kurven hinzufügen möchten.Was mich beim Zeichnen immer verwirrt hat, ist der Unterschied zwischen
curve
undlines
. (Wenn Sie sich nicht erinnern können, dass dies die Namen der beiden wichtigen Zeichenbefehle sind, singen Sie sie einfach .)Hier ist der große Unterschied zwischen
curve
undlines
.curve
wird eine Funktion zeichnen, wiecurve(sin)
.lines
Zeichnet Punkte mit x- und y-Werten wie :lines( x=0:10, y=sin(0:10) )
.Und hier ist ein kleiner Unterschied:
curve
Mussadd=TRUE
für das, was Sie versuchen, aufgerufen werden , währendlines
bereits davon ausgegangen wird, dass Sie zu einem vorhandenen Plot hinzufügen.Hier ist das Ergebnis des Anrufs
plot(0:2); curve(sin)
.Schauen Sie sich hinter den Kulissen um
methods(plot)
. Und überprüfenbody( plot.function )[[5]]
. Wenn Sieplot(sin)
R aufrufen, stellen Sie fest , dass diessin
eine Funktion ist (keine y-Werte) und verwenden Sie dieplot.function
Methode, die am Ende aufruftcurve
. Socurve
ist das Werkzeug Funktionen zu handhaben sollte.quelle
Wenn Sie das Diagramm in zwei Spalten aufteilen möchten (2 Diagramme nebeneinander), können Sie dies folgendermaßen tun:
Referenzlink
quelle
Wie von @redmode beschrieben, können Sie die beiden Linien mit demselben Grafikgerät zeichnen
ggplot
. In dieser Antwort hatten die Daten ein "breites" Format. Bei der Verwendung istggplot
es jedoch im Allgemeinen am bequemsten, die Daten in einem Datenrahmen in einem "langen" Format zu halten. Verwenden Sie dann verschiedene 'Gruppierungsvariablen' in deraes
Wenn Sie dann Thetics-Argumenten verwenden, variieren die Eigenschaften der Linie, wie z. B. Linientyp oder Farbe, je nach Gruppierungsvariable, und entsprechende Legenden werden angezeigt.In diesem Fall können wir die
colour
Ästhetik verwenden, die die Farbe der Linien an verschiedene Ebenen einer Variablen im Datensatz anpasst (hier: y1 vs y2). Aber zuerst müssen wir die Daten vom Breit- zum Langformat schmelzen, z. B. mit der Funktion 'Schmelzen' aus demreshape2
Paket. Weitere Methoden zum Umformen der Daten werden hier beschrieben: Umformen von data.frame vom Breit- zum Langformat .quelle
Wenn Sie Basisgrafiken verwenden (dh keine Gitter- / Gittergrafiken), können Sie die Haltefunktion von MATLAB nachahmen, indem Sie die Funktionen Punkte / Linien / Polygone verwenden, um Ihren Plots zusätzliche Details hinzuzufügen, ohne ein neues Plot zu starten. Bei einem Multiplot-Layout können Sie
par(mfg=...)
auswählen, zu welchem Plot Sie Dinge hinzufügen möchten.quelle
Sie können also Punkte für die Überzeichnung verwenden.
quelle
Speichern Sie die zu zeichnenden Werte nicht in einem Array, sondern in einer Matrix. Standardmäßig wird die gesamte Matrix als ein Datensatz behandelt. Wenn Sie dem Plot jedoch die gleiche Anzahl von Modifikatoren hinzufügen, z. B. col (), wie Sie Zeilen in der Matrix haben, stellt R fest, dass jede Zeile unabhängig behandelt werden sollte. Zum Beispiel:
Dies sollte funktionieren, es sei denn, Ihre Datensätze haben unterschiedliche Größen.
quelle
Idiomatisches Matlab
plot(x1,y1,x2,y2)
kann beispielsweise folgendermaßen in R übersetztggplot2
werden:Inspiriert von Tingting Zhaos Dual-Line-Plots mit unterschiedlichem Bereich der x-Achse mit ggplot2 .
quelle
Sie könnten die
ggplotly()
Funktion aus dem Plotly- Paket verwenden, um eines der gggplot2- Beispiele hier in ein interaktives Plot umzuwandeln , aber ich denke, diese Art von Plot ist ohne ggplot2 besser :quelle
Sie können Ihr Diagramm auch mit ggvis erstellen :
Dadurch wird das folgende Diagramm erstellt:
quelle
Verwenden
plotly
(Hinzufügen einer Lösungplotly
mit der primären und sekundären y-Achse - Es scheint zu fehlen):Screenshot von der Arbeitsdemo:
quelle
Error in library(plotly) : there is no package called ‘plotly’
Warum?plotly
? Sie müssen das Paket mit deminstall.packages("plotly")
Befehl installieren .Wir können auch eine Gitterbibliothek verwenden
Für bestimmte Farben
quelle