2012-04-16 10 views
14

私は因子変数に従ってファセットを導入してexample of a simple forestプロットを修正しようとしています。このような構造のデータを仮定しggplot2ファセットから空の要素を削除するにはどうすればよいですか?

test <- structure(list(characteristic = structure(c(1L, 2L, 3L, 1L, 2L 
), .Label = c("Factor1", "Factor2", "Factor3"), class = "factor"), 
    es = c(1.2, 1.4, 1.6, 1.3, 1.5), ci_low = c(1.1, 1.3, 1.5, 
    1.2, 1.4), ci_upp = c(1.3, 1.5, 1.7, 1.4, 1.6), label = structure(c(1L, 
    3L, 5L, 2L, 4L), .Label = c("1.2 (1.1, 1.3)", "1.3 (1.2, 1.4)", 
    "1.4 (1.3, 1.5)", "1.5 (1.4, 1.6)", "1.6 (1.5, 1.7)"), class = "factor"), 
    set = structure(c(1L, 1L, 1L, 2L, 2L), .Label = c("H", "S" 
    ), class = "factor")), .Names = c("characteristic", "es", 
"ci_low", "ci_upp", "label", "set"), class = "data.frame", row.names = c(NA, 
-5L)) 

そしてコードを実行している:これまで

enter image description here

すべて良い:

p <- ggplot(test, aes(x=characteristic, y=es, ymin=ci_low, ymax=ci_upp)) + geom_pointrange() + 
    coord_flip() + geom_hline(aes(x=0), lty=2) + 
    facet_wrap(~ set, ncol = 1) + 
    theme_bw() + 
    opts(strip.text.x = theme_text()) 

はそのような出力を生成します。しかし、私は下のパネルから空のFactor3レベルを取り除きたいと思いますし、それを行う方法を見つけることができません。それを行う方法はありますか?

ありがとうございました。

+5

Rを参照するとき、「そこに...」と質問し、「どうすればよいのですか?」と尋ね始めました。「install.packages( "fortunes");ライブラリ(運勢);運命(「ヨーダ」) ' –

答えて

14

EDIT ggplot2に更新0.9.3

別の解決策があります。それはfacet_gridspace = "free"を使用します。また、geom_point()geom_errorbarh()を使用するので、coord.flip()の必要はありません。また、下のパネルにのみx軸の目盛りのラベルが表示されます。以下のコードでは、themeコマンドは必須ではありません。ストリップテキストを回転して水平に表示するコマンドです。

library(ggplot2) 

p <- ggplot(test, aes(y = characteristic, x = es, xmin = ci_low, xmax = ci_upp)) + 
    geom_point() + 
    geom_errorbarh(height = 0) + 
    facet_grid(set ~ ., scales = "free", space = "free") + 
    theme_bw() + 
    theme(strip.text.y = element_text(angle = 0)) 

p 

溶液をウィッカムのggplot2帳のページ124の例に基づいています。上からtestデータフレームを使用して、次のコードは、あなたが欲しいものを作る必要があります。

+1

ggplot2は私を驚かせることは決してありません。 – radek

12

のように使用scales = free:生成

p <- ggplot(test, aes(x=characteristic, y=es, ymin=ci_low, ymax=ci_upp)) + geom_pointrange() + 
    coord_flip() + geom_hline(aes(x=0), lty=2) + 
    facet_wrap(~ set, ncol = 1, scales="free") + 
    theme_bw() + 
    opts(strip.text.x = theme_text()) 

p 

enter image description here

EDIT:

p <- ggplot(test, aes(x=characteristic, y=es, ymin=ci_low, ymax=ci_upp)) + 
    geom_pointrange() + 
    coord_flip() + geom_hline(aes(x=0), lty=2) + 
    facet_wrap(~ set, ncol = 1, drop=TRUE) + 
    theme_bw() + 
    opts(strip.text.x = theme_text()) 

p 
:私は実際のように、私は、このソリューションのためのより良い drop = TRUE引数が好きだと思うが
+0

優秀!魅力的な作品。しかし、1つの質問:パネルは常に比例したサイズ(垂直)ですか?そこにはありますか?そうではありません - それぞれの要因の数に応じてどのようにスケールすることができますか?たとえば、上パネルに10、下に3があれば? – radek

+3

私は 'space =" free "があなたが探しているもう一つの議論だと思います。 –

+0

私は 'space =" free "引数が[facet_grid](http://had.co.nz/ggplot2/facet_grid.html)用だと思います。しかし、scales = 'free_x''はそこではもう動作しません:/ – radek

関連する問題