2010-11-25 26 views
24

いくつかのサンプルデータ:異なるファセットに異なるスケール制限を設定するにはどうすればよいですか?

dfr <- data.frame(
    x = rep.int(1:10, 2), 
    y = runif(20), 
    g = factor(rep(letters[1:2], each = 10)) 
) 

2つのファセットを有する単純な散布:

p + scale_y_continuous(limits = c(0.2, 0.8)) 

(又はこれのラッパーと

p <- ggplot(dfr, aes(x, y)) + 
    geom_point() + 
    facet_wrap(~ g, scales = "free_y") 

私はすべてのパネルの軸の範囲を設定することができlike ylim

しかし、どのようにdi異なるファセットの異なる軸の制限?

それを行うためのlatticey方法は、例えば、

p + scale_y_continuous(limits = list(c(0.2, 0.8), c(0, 0.5))) 

は、残念ながらそれはちょうどggplot2の場合のエラーをスローし、この引数にリストを渡すことであろう。

EDIT:

は、ここで部分的にハックです。スケールの範囲を拡張する場合は、制限を指定してデータセットに列を追加し、geom_blankで描画します。

修正データセット:

dfr <- data.frame(
    x = rep.int(1:10, 2), 
    y = runif(20), 
    g = factor(rep(letters[1:2], each = 10)), 
    ymin = rep(c(-0.6, 0.3), each = 10), 
    ymax = rep(c(1.8, 0.5), each = 10) 
) 

更新プロット:

p + geom_blank(aes(y = ymin)) + geom_blank(aes(y = ymax)) 

今すぐスケールが異なっていて、左手1が正しいです。残念ながら、右手の尺度は、ポイントのためのスペースを作る必要があるので、収縮しません。

助けになる場合は、「scale_y_continuousを明示的に呼び出すことなく、スケールを再計算せずにポイントを描画することは可能ですか?」と言い換えることができます。

答えて

5

これはggplot2ではまだ可能ではないと思います。 1月のこのdiscussionは、問題が検討中であることを示しています。

+0

リンクありがとうございます。私が望んでいた答えではありません。 –

+0

@Ritchie:Hadleyにチェックをして、彼はggplot2の開発版 –

0

左のプロットで縮尺を縮小するには、範囲外の点を削除します。例えば。これは、0と0.5の間の値に右のプロット上のYスケールを縮小します:

p <- ggplot(dfr, aes(x, y)) + 
    geom_point(subset=.(g == "a" | (y > 0 & y <.5))) + 
    geom_blank(aes(y = ymin)) + geom_blank(aes(y = ymax)) + 
    facet_wrap(~ g, scales = "free_y") 

このquestionにも私の答えを参照してください。

関連する問題