Я думаю, что лучший способ определить, является ли массив пустым или нет, использовать count () следующим образом:
if(count($array)) {
return 'anything true goes here';
}else {
return 'anything false';
}
Пакет Lattice часто (но не всегда) игнорирует команду par , поэтому я просто не использую ее при построении w / Lattice .
Поместить несколько графиков решетки на одну страницу:
гораздо проще показать, чем сказать:
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))
Пакет «решетка» построен на пакете сетки и прикрепляет пространство имен при загрузке «решетки». Однако, чтобы использовать функцию grid.layout
, вам нужно явно load()
pkg :: grid. Другой альтернативой, которая, вероятно, проще, является функция grid.arrange
в 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)
[/g0]
Это просто сделать, когда вы читаете ?print.trellis
. Особый интерес представляет параметр split
. Это может показаться сложным с первого взгляда, но это довольно просто, как только вы поймете, что это значит. Из документации:
split: вектор из 4 целых чисел, c (x, y, nx, ny), который говорит, чтобы расположить текущий график в позиции x, y в регулярном массиве nx по ny-графикам. (Примечание: это начало в верхнем левом углу)
blockquote>Вы можете увидеть пару реализаций на
example(print.trellis)
, но вот тот, который я предпочитаю: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
Приведенный выше код дает вам эту цифру:
Как вы можете видеть,
split
принимает четыре параметра. последние два относятся к размеру вашего кадра (аналогично тому, как это делаетmfrow
), тогда как первые два параметра позиционируют ваш график вnx
наny
.
split
в?print.trellis
и раздел 5.8 графики Murrell's R. books.google.co.uk/books?id=78P4zntHHVQC – Richie Cotton 31 March 2010 в 11:42c.trellis
в пакетеlatticeExtra
также полезен. – qoheleth 24 December 2014 в 01:58