我试图让我的底部图形的宽度与月份的长度成比例。
但是,我最终得到了
我有两个级别的图表,一个是较大的图表,占据整行,另一个是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
奇怪的是当我手动调整宽度数组中的数字时(使用1和2)。尺寸确实相应地波动。但是,在这种情况下。情况似乎并非如此。
1月太短了。我错过了我的逻辑吗?答案 0 :(得分: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)
答案 1 :(得分:2)
Didzis Elferts的答案是一个很好的答案。我要注意,当你处理时间序列时,你可以使用xts
包。特别是该绘图是在基本图形中完成的。
这里有一个例子:
monthly.apply
来分割我的对象。首先,我生成一些随机数据
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轴。