【问题标题】:Arrange and size multiple plots in Lattice R在 Lattice R 中排列和调整多个图的大小
【发布时间】:2013-03-06 17:56:35
【问题描述】:

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

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 将边距设置为零。 有没有办法说“地块之间的距离”?

【问题讨论】:

  • 在我看来,你应该确保每个地块的边距在安排它们之前是合适的。
  • 我删除了边距,但不幸的是它并没有太大变化。

标签: r plot lattice


【解决方案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 参数来控制图看起来非常接近。

【讨论】:

    【解决方案2】:

    您可以使用的一个技巧是调整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)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 2023-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多