Ich versuche, mithilfe levelplot
der 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
?
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 explizit load()
pkg :: grid verwenden. Die andere Alternative, die wahrscheinlich einfacher ist, ist die grid.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)
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))
split
Argument zu ?print.trellis
und Abschnitt 5.8 von Murrells "R-Grafiken" books.google.co.uk/books?id=78P4zntHHVQC
c.trellis
Verknüpfung im latticeExtra
Paket nützlich.
Dies ist einfach, sobald Sie gelesen haben ?print.trellis
. Von besonderem Interesse ist der split
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:
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 split
vier Parameter verwendet. Die letzten beiden beziehen sich auf die Größe Ihres Frames (ähnlich wie bei der mfrow
Ausführung), während die ersten beiden Parameter Ihr Diagramm im nx
By- ny
Frame 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.