3

下のグラフの幅を月の長さに比例させようとしています。

しかし、私は結局

2つのレベルのグラフがあります。1つは行全体を占める大きなプロットで、もう1つは2番目の行全体を占める12のプロットです。

2行目のプロットでは、幅を月の長さに比例させたいので、

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

奇妙なことに、widths配列の数値を手動で調整します(1と2を使用)。サイズはそれに応じて変動します。ただし、この場合。これは当てはまらないようです。

1月は短すぎます。ロジックに何かが欠けていますか?

4

2 に答える 2

3

一番下の行には12のプロットしかありませんが、widths=引数に13の値(数値1とすべてのmonths値)を指定しました。widths=months必要な結果を得るために使用するだけです。widths =引数で指定した値の数は、最も長い1行のプロットの数と同じである必要がありますが、すべてのプロットの数と同じではありません。

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

DidzisElfertsの答えは良い答えです。時系列を扱うときはxtsパッケージを使用できることに注意してください。特に、そのプロットはベースグラフィックスで行われます。ここに例があります:

  • monthly.apply私は自分のオブジェクトを分割するために使用します。
  • 私はplot.xtsを使用して時系列をpltします。

まず、ランダムデータを生成します

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 に答える