übereinander - r plot title position



Zeichnen Sie zwei Graphen in demselben Diagramm in R (10)

Beim ggplot Multilayer-Plots sollte das ggplot Paket berücksichtigt werden. Die Idee besteht darin, ein grafisches Objekt mit einer grundlegenden Ästhetik zu erstellen und schrittweise zu erweitern.

ggplot Stil erfordert, dass Daten in data.frame gepackt data.frame .

# Data generation
x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x,1,1)
df <- data.frame(x,y1,y2)

Basislösung:

require(ggplot2)

ggplot(df, aes(x)) +                    # basic graphical object
  geom_line(aes(y=y1), colour="red") +  # first layer
  geom_line(aes(y=y2), colour="green")  # second layer

Hier + operator wird verwendet, um zusätzliche Ebenen zum Basisobjekt hinzuzufügen.

Mit ggplot Sie Zugriff auf grafische Objekte in jeder Phase des Plottens. Sagen wir mal, die übliche Schritt-für-Schritt-Konfiguration kann so aussehen:

g <- ggplot(df, aes(x))
g <- g + geom_line(aes(y=y1), colour="red")
g <- g + geom_line(aes(y=y2), colour="green")
g

g erzeugt die Handlung, und Sie können sie in jedem Stadium sehen (gut, nach der Schaffung von mindestens einer Schicht). Weitere Verzauberungen der Handlung werden auch mit erzeugtem Objekt gemacht. Zum Beispiel können wir Etiketten für Achsen hinzufügen:

g <- g + ylab("Y") + xlab("X")
g

Das finale g sieht folgendermaßen aus:

UPDATE (2013-11-08):

Wie in den Kommentaren erwähnt, ggplot die Philosophie von ggplot vor, Daten im Langformat zu verwenden. Sie können diese Antwort https://stackoverflow.com/a/19039094/1796914 beziehen, um den entsprechenden Code zu sehen.

https://code.i-harness.com

Ich möchte y1 und y2 in der gleichen Handlung plotten.

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 in der gleichen Handlung zusammen geplottet.

In Matlab kann man sich hold on , aber weiß jemand, wie man das in R macht?


Ich denke, dass die Antwort, die Sie suchen, ist:

plot(first thing to plot)
plot(second thing to plot,add=TRUE)

Sie können par und Plot auch auf demselben Diagramm, aber mit unterschiedlicher Achse verwenden. Etwas wie folgt:

plot( x, y1, type="l", col="red" )
par(new=TRUE)
plot( x, y2, type="l", col="green" )

Wenn Sie im Detail über par in R lesen, werden Sie in der Lage sein, wirklich interessante Graphen zu erzeugen. Ein anderes Buch, das man sich ansehen kann, ist Paul Murrels R Graphics.


Sie können Ihr Diagramm auch mit ggvis :

library(ggvis)

x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x,1,1)
df <- data.frame(x, y1, y2)

df %>%
  ggvis(~x, ~y1, stroke := 'red') %>%
  layer_paths() %>%
  layer_paths(data = df, x = ~x, y = ~y2, stroke := 'blue')

Dies wird das folgende Diagramm erstellen:


Sie können die Plotly R API verwenden , um dies zu formatieren . Unten finden Sie den Code dazu, und die Live-Version dieses Diagramms ist here .

# call Plotly and enter username and key
library(plotly)
p <- plotly(username="Username", key="API_KEY")

# enter data
x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x,1,1)

# format, listing y1 as your y.
First <- list(
x = x,
y = y1,
type = 'scatter',
mode = 'lines',
marker = list(
    color = 'rgb(0, 0, 255)',
    opacity = 0.5
 )
)

# format again, listing y2 as your y.
Second <- list(
x = x,
y = y2,
type = 'scatter',
mode = 'lines',
opacity = 0.8, 
marker = list(
    color = 'rgb(255, 0, 0)'
 )
)

# style background color
plot_bgcolor = 'rgb(245,245,247)'

# and structure the response. Plotly returns a URL when you make the call. 
response<-p$plotly(list(First,Second), kwargs = list(layout=layout))

Volle Enthüllung: Ich bin im Plotly-Team.


Speichern Sie die Werte, die in einem Array gezeichnet werden sollen, nicht in einer Matrix. Standardmäßig wird die gesamte Matrix als ein Datensatz behandelt. Wenn Sie jedoch dem Plot die gleiche Anzahl von Modifikatoren hinzufügen, z. B. das col (), wird R herausfinden, dass jede Zeile unabhängig behandelt werden muss, wenn Sie Zeilen in der Matrix haben. Beispielsweise:

x = matrix( c(21,50,80,41), nrow=2 )
y = matrix( c(1,2,1,2), nrow=2 )
plot(x, y, col("red","blue")

Dies sollte funktionieren, wenn Ihre Datensätze nicht unterschiedlich groß sind.


Wenn Sie Basisgrafiken (dh keine Gitter- / Gittergrafiken) verwenden, können Sie die MATLAB-Haltefunktion nachahmen, indem Sie die Funktionen Punkte / Linien / Polygone verwenden, um zusätzliche Details zu Ihren Diagrammen hinzuzufügen, ohne ein neues Diagramm zu beginnen. Im Fall eines Multiplot-Layouts können Sie par(mfg=...) um auszuwählen, welchem ​​Plot Sie par(mfg=...) hinzufügen.


Wenn Sie den Bildschirm teilen möchten, können Sie es so machen:

(zum Beispiel für 2 Grundstücke nebeneinander)

par(mfrow=c(1,2))

plot(x)

plot(y) 

Referenzlink


lines() oder points() werden zum bestehenden Graphen hinzugefügt, erstellen aber kein neues Fenster. Also müsstest du machen

plot(x,y1,type="l",col="red")
lines(x,y2,col="green")

tl; dr: Sie möchten eine curve (mit add=TRUE ) oder lines .

Ich stimme mit par(new=TRUE) überein par(new=TRUE) weil das Tick-Marken und Achsenbeschriftungen doppelt drucken wird. Z.B

Der Ausgang der plot(sin); par(new=T); plot( function(x) x**2 ) plot(sin); par(new=T); plot( function(x) x**2 ) plot(sin); par(new=T); plot( function(x) x**2 ) .

Schau, wie versaut die vertikalen Achsenbeschriftungen sind! Da die Bereiche unterschiedlich sind, müsste man ylim=c(lowest point between the two functions, highest point between the two functions) , was weniger einfach ist als das, was ich dir zeigen werde --- und viel weniger einfach, wenn Sie möchten nicht nur zwei Kurven hinzufügen, sondern viele.

Was mich immer am Plotten verwirrt hat, ist der Unterschied zwischen curve und lines . (Wenn Sie sich nicht erinnern können, dass dies die Namen der beiden wichtigen Zeichenbefehle sind, sing Sie einfach.)

Hier ist der große Unterschied zwischen curve und lines .

curve wird eine Funktion wie curve(sin) zeichnen. lines zeichnen Punkte mit x- und y-Werten auf, wie: lines( x=0:10, y=sin(0:10) ) .

Und hier ist ein kleiner Unterschied: Die curve muss aufgerufen werden mit add=TRUE für das, was Sie zu tun versuchen, während lines bereits davon ausgehen, dass Sie zu einem bestehenden Plot hinzufügen.

Hier ist das Ergebnis des Aufrufs plot(0:2); curve(sin) plot(0:2); curve(sin) .

Hinter den Kulissen, schau dir methods(plot) . Und überprüfen Sie body( plot.function )[[5]] . Wenn Sie plot(sin) aufrufen, stellt R fest, dass sin eine Funktion ist (keine y-Werte) und verwendet die Methode plot.function , die zur plot.function . curve ist also das Werkzeug, das für Funktionen gedacht ist.





r-faq