2010-03-29 45 views
53

我想通過設置par(mfrow=c(2,1))使用levelplot在一個窗口中放置多個格子圖,但它似乎忽略了這一點。格子:在一個窗口中有多個圖塊?

lattice中設置多個圖有沒有特別的功能?

+2

'lattice'圖通常不使用'par'設置。他們有自己的一組來自Grid圖形的設置。請參閱'?trellis.par.get'獲取解釋。 – James 2010-03-30 12:56:39

回答

38

包往往(但並不總是)忽略相提並論命令,所以我只是避免出現打印W/時使用它。

將多個格子情節單頁上:

  • 創建(但不積)格/網格情節對象,然後

  • 致電打印每個地塊一次

  • 每個打印呼叫,通過在(i)所述情節參數; (ⅱ) ,設置爲TRUE,並且其僅通過在用於初始調用打印,和(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

另請參見'print.trellis'的'split'參數和Murrell的「R圖形」的第5.8節http://books.google.co.uk/books?id=78P4zntHHVQC – 2010-03-31 10:42:37

+3

如果有公共座標軸,'c 'latticeExtra'包中的.trellis'快捷方式也很有用。 – qoheleth 2014-12-24 00:58:58

60

的「格子」包是建立在格包,當「格子」裝載重視它的命名空間。但是,爲了使用grid.layout函數,您需要明確地指定load() pkg :: grid。另一種選擇,這可能是更容易,是在pkg的grid.arrange功能:: 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) 

enter image description here

+1

這比接受的答案更整齊。 – qed 2013-10-26 13:55:17

+0

[這裏](http://www.statmethods.net/advgraphs/layout.html)你可以找到整潔的例子。 – Masoud 2017-04-04 15:06:32

+0

@Masoud:該頁面僅使用基礎圖形。問題是關於格子圖形。 – 2017-04-04 17:12:57

6

這是簡單,一旦你讀?print.trellis做。特別感興趣的是split參數。看起來似乎很複雜,但一旦你理解它的意思,這很簡單。從文檔:

split:一個由4個整數組成的向量c(x,y,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 

上面的代碼爲您提供了這個數字: levelplots

正如您所見,split需要四個參數。 最後兩個指的是您的幀的大小(類似於mfrow所做的),而參數將您的繪圖定位到nxny幀。