在Lattice R中排列和调整多个图

时间:2013-03-06 17:56:36

标签: r plot lattice

我想绘制三个地块紧密相连,因此它们显示为一个字段。我的数据是具有不同维度的数组。 以下是一些显示我的问题的示例代码:

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将边距设置为零。 这是一种说“情节之间的距离”的方式吗?

2 个答案:

答案 0 :(得分:1)

如果将数据结构化为一个不错的data.frame,这个问题很容易解决。莱迪思在data.frames上效果最佳。请参见下面的示例:

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"

您可以通过设置比例参数来控制图表非常接近。

答案 1 :(得分: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)

你必须对此进行一些调整,我还没有测试过这段代码。但我认为总体思路应该有效。