2013-03-06 37 views
0

我想绘制三个地块紧密连在一起,因此它们显示为一个场地。我的数据是不同维度的数组。 下面是一些示例代码,以显示我的问题:在格子中排列和确定多个地块R

library(lattice) 

theme.novpadding = list(layout.heights = list(top.padding = 0, 
              main.key.padding = 0, 
              key.axis.padding = 0, 
              axis.xlab.padding = 0, 
              xlab.key.padding = 0, 
              key.sub.padding = 0, 
              bottom.padding = 0), 
        layout.widths = list(left.padding = 0, 
              key.ylab.padding = 0, 
              ylab.axis.padding = 0, 
              axis.key.padding = 0, 
              right.padding = 0), 
        axis.line = list(col = "transparent")) 


p1 = levelplot(array(c(1:100), c(10,10)), colorkey=F, par.settings=theme.novpadding) 
p2 = levelplot(array(c(1:100), c(9,9)), colorkey=F, ylab = NULL, par.settings=theme.novpadding) 
p3 = levelplot(array(c(1:100), c(11,11)), ylab=NULL, par.settings=theme.novpadding) 

width = 0.33 
height = 1 

ph = list(5, "in") 

print(p1, position = c(0, 0, width, height), panel.height=ph, more=T) 
print(p2, position = c(width, 0, 2*width, height), panel.height=ph, more=T) 
print(p3, position = c(2*width, 0, 3*width, height),panel.height=ph, more=F) 

正如你看到的,它们散布很广。我希望他们尽可能靠近。 我使用theme.novpadding将边距设置为零。 是一种表达“情节之间的距离”的方式吗?

+0

对我来说,在安排它们之前,你应该确保每个小区的边缘都是舒适的。 – baptiste 2013-03-06 18:19:54

+0

我删除了边距,但不幸的是变化不大。 – 2013-03-07 09:48:34

回答

0

你可以使用的一个技巧是调整position argument。而不是让区域重叠,你可以做到这一点,让它们靠得很近。例如,你可以改变位置参数:

ovr = 0.05 
print(p1, position = c(0, 0, width + ovr, height), panel.height=ph, more=T) 
print(p2, position = c(width - ovr, 0, 2*width+ovr, height), panel.height=ph, more=T) 
print(p3, position = c(2*width - ovr, 0, 3*width, height),panel.height=ph, more=F) 

你有一些调整,这一点,我还没有测试此代码。但我认为总体思路应该起作用。

0

如果你把你的数据构造成一个漂亮的data.frame,这个问题很容易解决。莱迪思在数据框架上效果最好。参见下文的例子:

g.xy <- expand.grid(1:10, 1:10) 
my.data <- data.frame(x=g.xy$Var1, y = g.xy$Var2, value1=1:100, value2 = 1:100, value3=1:100, value4=1:100) 
levelplot(value1+value2+value3+value4~x+y, data=my.data, scales=list(x="free", y="free")) # free 
levelplot(value1+value2+value3+value4~x+y, data=my.data, scales=list(x="same", y="same")) # same range, so panels are "touching" 

您可以控制的阴谋通过设置scale参数显得非常接近。