2011-12-15 20 views
1

は、私は、次のコードを使用してggplot2で箱ひげ図を作成しようとしている:ggplot boxplotによる位置 - ダッジ警告?

p <- ggplot(data, aes(d$score, reorder(d$names d$scores, median))) + geom_boxplot() 

私が要因と呼ばれる名前とスコアと呼ばれる整数を持っています。

私のコードはプロットを生成しますが、グラフィックはボックスを描画せず(線のみを表示します)、「position_dodgeに重複しないx間隔が必要です」という警告メッセージが表示されます。私はgeom_boxplot(width=5)で高さと幅を調整しようとしましたが、これは問題を解決していないようです。誰も私の問題に可能な解決策を提案することはできますか?

私のボックスプロットはかなり大きく、y軸に約200の名前の値があることを指摘しておきます。多分これは問題ですか?

答えて

18

グループの数は問題ではありません。私は2つだけのグループがあっても同じことを見ることができます。問題は、ggplot2がボックスプロットを垂直方向に(yに沿って連続し、xに沿って連続して)描画し、それらを水平に描画しようとしていることです(xに沿って連続し、yに沿って連続しています)。

また、例にはいくつかの構文エラーがあり、data/dがないため再現できません。あなたの例のコードのいくつかのモックデータ

dat <- data.frame(scores=rnorm(1000,sd=500), 
        names=sample(LETTERS, 1000, replace=TRUE)) 

修正したバージョンと

スタート:

ggplot(dat, aes(scores, reorder(names, scores, median))) + geom_boxplot() 

ggplot(dat, aes(scores, reorder(names, scores, median))) + geom_boxplot()

これは、あなたが見た水平線です。

あなたの代わりにY上のX軸上のカテゴリを入れて、連続した場合、あなたは座標軸を反転したい場合は最後に、あなたがcoord_flip()を使用することができます

ggplot(dat, aes(reorder(names, scores, median), scores)) + geom_boxplot() 

ggplot(dat, aes(reorder(names, scores, median), scores)) + geom_boxplot()

を取得します。さらに洗練されたことをしている場合は、これにいくつかの追加の問題があるかもしれませんが、基本的なボックスプロットでは機能します。

ggplot(dat, aes(reorder(names, scores, median), scores)) + 
    geom_boxplot() + coord_flip() 

ggplot(dat, aes(reorder(names, scores, median), scores)) + geom_boxplot() + coord_flip()

+0

うわー、ありがとうございました!これは正確に私が持っていた問題です。私は徹底的な答えに非常に感謝します。 – drbunsen