2012-02-27 4 views
5

私は複数の可変時系列を持っていますが、変数の中にはかなり大きな範囲があります。私は変数のいくつかがlog10のy軸スケーリングを持つように、各変数の複数の積み重ねプロットを含む単一ページのプロットを作成したいと思います。私は格子が比較的新しく、非変形軸とlog10スケーリングをどのように効果的に混合し、出版品質のプロットを得るかを理解することができませんでした。 print.trellisが使用されている場合、プロットは整列せず、パディングにはいくつかの作業が必要です。c.trellisを使用するとレイアウトは良好ですが、1つのプロットからのyスケーリングのみが使用されます。効率的なソリューションの提案です。ここでは、各(元の)オブジェクトに対して異なるy-スケーリングを使用してc.trellisの出力を複製できますか?以下 例:@のjoranのアイデアを使用してlatticeまたはlatticeExtra異なる複数のプロットを組み合わせるyscaling(log10および非変換)

require(lattice) 
    require(latticeExtra) 

    # make data.frame 
    d.date <- as.POSIXct(c("2009-12-15", "2010-01-15", "2010-02-15", "2010-03-15", "2010-04-15"))     
    CO2dat <- c(100,200,1000,9000,2000) 
    pHdat <- c(10,9,7,6,7) 
    tmp <- data.frame(date=d.date ,CO2dat=CO2dat ,pHdat=pHdat) 

    # make plots 
    plot1 <- xyplot(pHdat ~ date, data=tmp 
    , ylim=c(5,11) 
    , ylab="pHdat" 
    , xlab="Date" 
    , origin = 0, border = 0 
    , scales=list(y=list(alternating=1)) 
    , panel = function(...){ 
    panel.xyarea(...) 
    panel.xyplot(...) 
    } 
    ) 

    # make plot with log y scale 
    plot2 <- xyplot(CO2dat ~ date, data=tmp 
      , ylim=c(10,10^4) 
      , ylab="CO2dat" 
      , xlab="Date" 
      , origin = 0, border = 0 
      , scales=list(y=list(alternating=1,log=10)) 
           , yscale.components = yscale.components.log10ticks 
      , panel = function(...){ 
       panel.xyarea(...) 
       panel.xyplot(...) 
       # plot CO2air uatm 
       panel.abline(h=log10(390),col="blue",type="l",...) 
      } 
      ) 

     # plot individual figures using split 
     print(plot2, split=c(1,1,1,2), more=TRUE) 
     print(plot1, split=c(1,2,1,2), more=F) 

     # combine plots (more convenient) 
     comb <- c(plot1, plot2, x.same=F, y.same=F, layout = c(1, 2)) 

     # plot combined figure 
     update(comb, ylab = c("pHdat","log10 CO2dat")) 
+0

ます( 'print.trellis'メソッドの)先頭の空白スペースでplot1にy軸の目盛りラベルをパディングみました、またはあなたはそれよりも少ないアドホックソリューションを探していますか? – joran

+0

こんにちは@ジョラン:以下のあなたの考えの私の試みを参照してください。 – Aaron

答えて

1

が、私は軸が近いではなく、正確に取得することができます。また、パディングを減らすと、それらは互いに接近しますが、縦横比は変化します。下の画像では、おそらくあまりにも正確ではないことを示すために、パディングを減らしました。このクローズが必要な場合は、明らかに上部のx軸ラベルも削除することをお勧めします。

左側の余白はラベルの幅から計算されるので、@ジョランの考えはおそらくsplitを使った印刷に基づいて動作する唯一のものです1つはplot.trellisコマンドを書き直すことでした。おそらくcメソッドが機能するかもしれませんが、パネルに応じてスケール成分を別々に設定する方法が見つかりませんでした。しかし、それはより有望なようです。

mtheme <- standard.theme("pdf") 
mtheme$layout.heights$bottom.padding <- -10 
plot1b <- update(plot1, scales=list(y=list(alternating=1, at=5:10, labels=paste(" ",c(5:10))))) 
plot2b <- update(plot2, par.settings=mtheme) 
pdf(file="temp.pdf") 
print(plot2b, split=c(1,1,1,2), more=TRUE) 
print(plot1b, split=c(1,2,1,2), more=F) 

enter image description here

+0

空きスペースがもう1つあれば、それはかなり近い、あるいは完璧に整列していると思います。 – joran

+0

@ joranと@Aaronあなたのソリューションは基本的に私にとって役に立ちます。それを明確にするためには、私が関係していたy軸のアライメントがありましたが、@Aaronsの例では、これまでに気づいていなかったアスペクト比の変化をうまく指摘しています。これを私の実際のデータに適用し、@joranが提案したように(目で) 'trellis.par.set(layout.widths = list(ylab.axis.padding = VALUE))'を調整しました。 y軸ラベルの幅が一定でないため(実際のデータラベルがより複雑なため)、ルールを記述するのが難しいことが分かりましたが、左マージンレイアウトを設定するコードを見ていきます。 –

+0

プロットを 'c'と組み合わせた後に、y軸ラベルを置き換えるだけでいいですか? –

関連する問題