Ich versuche, mithilfe levelplotder Einstellung mehrere Gitterdiagramme in ein Fenster einzufügenpar(mfrow=c(2,1)) aber dies scheint dies zu ignorieren.
Gibt es eine bestimmte Funktion zum Festlegen mehrerer Diagramme lattice?
Die latticeDiagramme verwenden die parEinstellungen im Allgemeinen nicht. Sie haben ihre eigenen Einstellungen aus Rastergrafiken. Siehe ?trellis.par.getfür eine Erklärung.
James
Antworten:
75
Das 'Gitter'-Paket basiert auf dem Gitterpaket und fügt seinen Namespace hinzu, wenn' Gitter 'geladen wird. Um die grid.layoutFunktion nutzen zu können, müssen Sie jedoch explizit load()pkg :: grid verwenden. Die andere Alternative, die wahrscheinlich einfacher ist, ist die grid.arrangeFunktion in pkg :: gridExtra:
Geben Sie für jeden Druckaufruf Argumente für (i) den Plot ein ; (ii)
mehr , auf TRUE gesetzt und nur für den ersten Druckaufruf übergeben , und (iii) pos , das die Position jedes Diagramms auf der Seite angibt, die als xy-Koordinatenpaare für die untere linke Seite des Diagramms angegeben ist Ecke bzw. obere rechte Ecke - dh ein Vektor mit vier Zahlen.
viel einfacher zu zeigen als zu sagen:
data(AirPassengers) # a dataset supplied with base R
AP = AirPassengers # re-bind to save some typing# split the AP data set into two pieces # so that we have unique data for each of the two plots
w1 = window(AP, start=c(1949, 1), end=c(1952, 1))
w2 = window(AP, start=c(1952, 1), end=c(1960, 12))
px1 = xyplot(w1)
px2 = xyplot(w2)
# arrange the two plots vertically
print(px1, position=c(0, .6, 1, 1), more=TRUE)
print(px2, position=c(0, 0, 1, .4))
Wenn es gemeinsame Achsen gibt , ist auch die c.trellisVerknüpfung im latticeExtraPaket nützlich.
Qoheleth
11
Dies ist einfach, sobald Sie gelesen haben ?print.trellis. Von besonderem Interesse ist der splitParameter. Es mag auf den ersten Blick kompliziert erscheinen, aber es ist ziemlich einfach, wenn Sie erst einmal verstanden haben, was es bedeutet. Aus der Dokumentation:
split: Ein Vektor von 4 ganzen Zahlen, c (x, y, nx, ny), der besagt, dass das aktuelle Diagramm an der x, y-Position in einem regulären Array von nx durch ny Diagramme positioniert werden soll. (Hinweis: Dies hat seinen Ursprung oben links)
Sie können einige Implementierungen sehen example(print.trellis), aber hier ist eine, die ich bevorzuge:
library(lattice)
# Data
w <- as.matrix(dist(Loblolly))
x <- as.matrix(dist(HairEyeColor))
y <- as.matrix(dist(rock))
z <- as.matrix(dist(women))
# Plot assignments
pw <- levelplot(w, scales = list(draw = FALSE)) # "scales..." removes axes
px <- levelplot(x, scales = list(draw = FALSE))
py <- levelplot(y, scales = list(draw = FALSE))
pz <- levelplot(z, scales = list(draw = FALSE))
# Plot prints
print(pw, split = c(1, 1, 2, 2), more = TRUE)
print(px, split = c(2, 1, 2, 2), more = TRUE)
print(py, split = c(1, 2, 2, 2), more = TRUE)
print(pz, split = c(2, 2, 2, 2), more = FALSE) # more = FALSE is redundant
Der obige Code gibt Ihnen diese Abbildung:
Wie Sie sehen können, werden splitvier Parameter verwendet. Die letzten beiden beziehen sich auf die Größe Ihres Frames (ähnlich wie bei der mfrowAusführung), während die ersten beiden Parameter Ihr Diagramm im nxBy- nyFrame positionieren .
lattice
Diagramme verwenden diepar
Einstellungen im Allgemeinen nicht. Sie haben ihre eigenen Einstellungen aus Rastergrafiken. Siehe?trellis.par.get
für eine Erklärung.Antworten:
Das 'Gitter'-Paket basiert auf dem Gitterpaket und fügt seinen Namespace hinzu, wenn' Gitter 'geladen wird. Um die
grid.layout
Funktion nutzen zu können, müssen Sie jedoch explizitload()
pkg :: grid verwenden. Die andere Alternative, die wahrscheinlich einfacher ist, ist diegrid.arrange
Funktion in pkg :: gridExtra:install.packages("gridExtra") require(gridExtra) # also loads grid require(lattice) x <- seq(pi/4, 5 * pi, length.out = 100) y <- seq(pi/4, 5 * pi, length.out = 100) r <- as.vector(sqrt(outer(x^2, y^2, "+"))) grid <- expand.grid(x=x, y=y) grid$z <- cos(r^2) * exp(-r/(pi^3)) plot1 <- levelplot(z~x*y, grid, cuts = 50, scales=list(log="e"), xlab="", ylab="", main="Weird Function", sub="with log scales", colorkey = FALSE, region = TRUE) plot2 <- levelplot(z~x*y, grid, cuts = 50, scales=list(log="e"), xlab="", ylab="", main="Weird Function", sub="with log scales", colorkey = FALSE, region = TRUE) grid.arrange(plot1,plot2, ncol=2)
quelle
Das Gitterpaket ignoriert oft (aber nicht immer) den Befehl par , daher vermeide ich es einfach, ihn beim Plotten mit Gitter zu verwenden .
So platzieren Sie mehrere Gitterdiagramme auf einer Seite:
erstellen (aber plotten nicht)die Gitter / Spalier Plot Objekte , dann
Rufen Sie print für jedes Grundstück einmal auf
Geben Sie für jeden Druckaufruf Argumente für (i) den Plot ein ; (ii) mehr , auf TRUE gesetzt und nur für den ersten Druckaufruf übergeben , und (iii) pos , das die Position jedes Diagramms auf der Seite angibt, die als xy-Koordinatenpaare für die untere linke Seite des Diagramms angegeben ist Ecke bzw. obere rechte Ecke - dh ein Vektor mit vier Zahlen.
viel einfacher zu zeigen als zu sagen:
data(AirPassengers) # a dataset supplied with base R AP = AirPassengers # re-bind to save some typing # split the AP data set into two pieces # so that we have unique data for each of the two plots w1 = window(AP, start=c(1949, 1), end=c(1952, 1)) w2 = window(AP, start=c(1952, 1), end=c(1960, 12)) px1 = xyplot(w1) px2 = xyplot(w2) # arrange the two plots vertically print(px1, position=c(0, .6, 1, 1), more=TRUE) print(px2, position=c(0, 0, 1, .4))
quelle
split
Argument zu?print.trellis
und Abschnitt 5.8 von Murrells "R-Grafiken" books.google.co.uk/books?id=78P4zntHHVQCc.trellis
Verknüpfung imlatticeExtra
Paket nützlich.Dies ist einfach, sobald Sie gelesen haben
?print.trellis
. Von besonderem Interesse ist dersplit
Parameter. Es mag auf den ersten Blick kompliziert erscheinen, aber es ist ziemlich einfach, wenn Sie erst einmal verstanden haben, was es bedeutet. Aus der Dokumentation:Sie können einige Implementierungen sehen
example(print.trellis)
, aber hier ist eine, die ich bevorzuge:library(lattice) # Data w <- as.matrix(dist(Loblolly)) x <- as.matrix(dist(HairEyeColor)) y <- as.matrix(dist(rock)) z <- as.matrix(dist(women)) # Plot assignments pw <- levelplot(w, scales = list(draw = FALSE)) # "scales..." removes axes px <- levelplot(x, scales = list(draw = FALSE)) py <- levelplot(y, scales = list(draw = FALSE)) pz <- levelplot(z, scales = list(draw = FALSE)) # Plot prints print(pw, split = c(1, 1, 2, 2), more = TRUE) print(px, split = c(2, 1, 2, 2), more = TRUE) print(py, split = c(1, 2, 2, 2), more = TRUE) print(pz, split = c(2, 2, 2, 2), more = FALSE) # more = FALSE is redundant
Der obige Code gibt Ihnen diese Abbildung:
Wie Sie sehen können, werden
split
vier Parameter verwendet. Die letzten beiden beziehen sich auf die Größe Ihres Frames (ähnlich wie bei dermfrow
Ausführung), während die ersten beiden Parameter Ihr Diagramm imnx
By-ny
Frame positionieren .quelle