R中布局的用法

时间:2015-03-24 16:29:19

标签: r plot

我试图为这个情节创建这个布局:

layout(matrix(c(1,1,1,1,1,1,
                2,2,2,3,3,3,
                2,2,2,3,3,3,
                2,2,2,3,3,3), nrow=4,ncol=6,byrow = TRUE))

# Set up the top chart that keeps track of the current frame/iteration
# Dress it up a little just for fun
plot(-5, xlim = c(1997,2011), ylim = c(0, .3), xlab = "", ylab = "", main = "Time",axes=F)
abline(v=1995, lwd=5, col = rgb(0, 0, 255, 255, maxColorValue=255))

# Bring back the X axis
xticks <- 1997:2011
axis(side=1, at=xticks, labels=xticks)

# Plot
plot(1:100,1:100)
plot(1:100,1:100)

显然,在我的实际代码中,最后两个情节并非plot(1:100,1:100),但我对layout的使用有疑问。为什么我在第一个情节中得到这个错误?

Error in plot.new() : figure margins too large

我希望第一张照片有一点高度

2 个答案:

答案 0 :(得分:4)

听起来可能很傻,但原因确实是数字边距太大了!

让我详细说明一下。在R中,有几种边距让你的照片呼吸:

Image credithttp://research.stowers-institute.org/mcm/efg/R/Graphics/Basics/mar-oma/index.htm

在您的特定情况下,边缘正在占用所有可用空间,因为您试图在同一图中填充太多数字。

要解决这个问题,我建议将所有边距设置为0:

par(mai=c(0,0,0,0), oma=c(0,0,0,0), mar=c(0,0,0,0))

这可能会导致您的情节至少被渲染。同时,所有子图都会彼此太靠近,所以你必须一点一点地增加边距,同样调用par(...),直到结果看起来很好。

希望这会有所帮助:)

答案 1 :(得分:2)

边距通过参数par(mar)par(oma)par(mai)以行高的倍数来衡量,如?par

中的这一段所述
  

MAR

     

形式c(底部,左侧,顶部,右侧)的数字向量,它给出了在图的四边指定的边距线数。默认值为c(5,4,4,2)+ 0.1。

有两种解决方案,您可以(a)通过设置之前的&#39; par()&#39;来减少边距。设置或(b)您可以通过使用鼠标重新调整设备(如果它是可见设备)或者如果要打印到PDF来增加设备的大小,例如,您可以设置设备大小通过在设置设备时设置高度和宽度参数来增大,如:

pdf( <<FileNameHere>> , width = par('din')[1],height = par('din')[2] )

我将宽度设置为par('din')[1],高度设置为par('din')[2],您将获得与当前设备尺寸相同的PDF,这样您就可以使用鼠标调整可见设备。 (这对于一次性情节和生产环境的不良做法非常方便)

如果确实缩小了边距,我建议不要设置mar=c(0,0,0,0),因为这会导致没有可见的轴标签。