0

我想绘制三个变化紧密的图,因此它们显示为一个字段。我的数据是不同维度的数组。这是一些显示我的问题的示例代码:

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 将边距设置为零。是一种说法,比如“地块之间的距离”吗?

4

2 回答 2

1

如果您将数据构造成一个不错的 data.frame,这个问题很容易解决。Lattice 在 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"

您可以通过设置 scale 参数来控制图看起来非常接近。

于 2016-12-02T18:09:34.343 回答
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)

您必须对此进行一些调整,而我尚未测试此代码。但我认为总体思路应该可行。

于 2013-03-12T11:11:12.033 回答