ggplot で position_dodge を使用して、同じカテゴリ (cat) を共有する 2 つの異なる信号 (ind) の箱ひげ図を取得しようとしています。ある信号のデータを含むカテゴリがあり、他の信号のカテゴリがない場合、データを含む信号の箱ひげ図はすべての水平間隔をカバーし、その特定のカテゴリの position_dodge 命令を尊重しません。回避ルールを適用するために ggplot を作成する方法はありますか? 以下の例でわかるように、信号 x にはカテゴリ B のデータがないため、position_dodge によって予約されたスペースが失われます。それは避けたいと思います。
前もって感謝します。
data<-data.frame(cat=c('A','A','A','A','B','B','A','A','A','A','B','B'),
values=c(3,2,1,4,NA,NA,4,5,6,7,8,9),
ind=c('x','x','x','x','x','x','y','y','y','y','y','y'))
print(ggplot() +
scale_colour_hue(guide='none') +
geom_boxplot(
aes(x=as.factor(cat), y=values,
fill=ind),
position=position_dodge(width=.60),
data=data,
outlier.size = 1.2,
na.rm=T))
進行状況の更新
いくつかの回避策の後、探していた結果にたどり着きました...(ちょっと)
data <- data.frame(
cat=c('A','A','A','A','B','B','A','A','A','A','B','B','B'),
values=c(3,2,1,4,NA,NA,4,5,6,7,8,9, 0),
ind=c('x','x','x','x','x','x','y','y','y','y','y','y','x'))
p <- ggplot() +
scale_colour_hue(guide='none') +
geom_boxplot(aes(x=as.factor(cat), y=values, fill=ind),
position=position_dodge(width=.60),
data=data,
outlier.size = 1.2,
na.rm=T) +
geom_line(aes(x=x, y=y),
data=data.frame(x=c(0,3),y=rep(0,2)),
size = 1,
col='white')
print(p)
私が望む効果のためにファセットを使用することを推奨する人もいました。ファセットでは、探している効果が得られません。私が探していた最終的なグラフを以下に示します。
お気付きのように、y = 10 の白い主目盛りは、他の目盛りよりも太くなっています。この太い線は、不要な箱ひげ図を隠す size=1 の geom_line です。
異なる geom オブジェクトをもっとシームレスに組み合わせることができればいいのにと思います。私はこれを Hadley の github のバグとして報告しましたが、Hadley は、これが position_dodge の仕様による動作であると述べました。私は ggplot2 を非標準的な方法で使用していると思います。回避策は、この種の問題を解決する方法です。とにかく、これが R の人々の何人かが ggplot の優れた機能をもう少しプッシュするのに役立つことを願っています.