3

我试图让我的底部图表的宽度与月份的长度成正比。

但是,我最终得到

我有 2 个级别的图表,1 个有一个较大的图,占用一整行,另一个有 12 个图,占用整个第二行。

对于第二行图,我希望它们的宽度与月份的长度成正比,所以我这样做

layout(matrix(c(rep(1,12),2:13),nrow=2,byrow=T),widths=c(1,months))

months 
[1] 31 28 31 30 31 30 31 31 30 31 30 31

奇怪的是当我手动调整宽度数组中的数字时(使用 1s 和 2s)。尺寸会相应波动。但是,在这种情况下。情况似乎并非如此。

一月太短了。我的逻辑是否遗漏了什么?

4

2 回答 2

3

您在底线上只有 12 个图,但您为widths=参数提供了 13 个值(数字1加上所有months值)。只需使用widths=months即可获得所需的结果。您使用 widths= 参数提供的值的数量应等于最长一行中的绘图数量,但不等于所有绘图的数量。

months<-c( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)    
layout(matrix(c(rep(1,12),2:13),nrow=2,byrow=T),widths=months)
layout.show(n = 13)

在此处输入图像描述

于 2013-02-26T06:33:36.733 回答
2

Didzis Elferts 的答案是一个很好的答案。我只是要注意,当您处理时间序列时,您可以使用xtspackage.json 。特别是该情节是在基本图形中完成的。这里有一个例子:

  • monthly.apply用来分割我的对象。
  • 我使用 plot.xts 来绘制我的时间序列。

首先,我生成一些随机数据

library(xts)
days <- seq.Date( as.Date("2011-01-01"), as.Date("2011-12-31") ,1)
dat <- xts(rnorm(365),days)

## I use monthly apply to compute months widths.
## no need to give them by hand.
widths <-  coredata(apply.monthly(dat,length))
par(bg="lightyellow", mar=c(2,2,2,0))
layout(matrix(c(rep(1,12),2:13),nrow=2,byrow=T),widths=widths*2)

mon <- months(days,abbreviate=T)
plot(dat,main = 'my year time series')

apply.monthly(dat,function(x) {
  if(unique(format((index(x)),'%m')) =='01') {#JAN
    par(mar=c(2,2,2,0))   ## special case of JAN because it contians y axis 
    plot(x,main='')
  }
  else{
    par( mar=c(2,0,2,0))
    plot(x,main='',ylab='')
  }
})

在此处输入图像描述

请注意:JAN 面板不小于 2 月 1 日。它包含 y 轴。

于 2013-02-26T07:15:37.263 回答