格子:在一个窗口中有多个地块?


70

我正在尝试levelplot通过设置在一个窗口中放置多个网格图,par(mfrow=c(2,1))但似乎忽略了这一点。

是否有用于设置多个图的特定功能lattice


3
这些lattice图通常不使用par设置。他们有自己的Grid图形设置集。请参阅?trellis.par.get以获取解释。
詹姆斯

Answers:


75

'lattice'软件包建立在grid软件包的基础上,并在加载'lattice'时附加其名称空间。但是,为了使用该grid.layout功能,您需要显式地使用load()pkg :: grid。另一个可能更容易的选择是grid.arrangepkg :: 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)

在此处输入图片说明


在这里您可以找到整洁的示例。
M–

@Masoud:该页面仅使用基本图形。问题是关于点阵图形。
IRTFM '17

@ 42-对不起,我想在阅读您的答案时再提一个问题。你是对的。
M–

42

格子包往往(但并不总是)忽略相提并论命令,所以我绘制W /时只需避免使用它

要将多个点阵图放在单个页面上:

  • 创建(但不绘制)晶格/格子图对象,然后

  • 为每个图调用一次打印

  • 对于每个打印调用,请传递(i)绘图的参数;(ii) more,设置为TRUE,并且仅在首次调用print时传入,以及(iii)pos,其给出页面上每个图的位置,指定为该图左下角的xy坐标对角和右上角,分别是具有四个数字的向量。

显示起来比说起来容易得多:

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))

3
另请参阅Murrell的“ R图形” books.google.co.uk/books?id=78P4zntHHVQCsplit参数?print.trellis和5.8节
Richie Cotton

3
如果有通用轴c.trellis,则latticeExtra包装中的快捷方式也很有用。
qoheleth 2014年

11

阅读后,此操作很简单?print.trellis。特别令人感兴趣的是split参数。乍一看似乎很复杂,但是一旦理解了它的意思,它就非常简单。从文档中:

split:一个由4个整数组成的向量c(x,y,nx,ny),表示将当前图放置在nx乘以ny的规则数组中的x,y位置。(注意:此商品的原点位于左上方)

您可以在上看到一些实现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一样),而前两个参数的标示位置到nxny框架。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.