2016-11-15 7 views
5

私はアルファを組み合わせてggplot2を埋めようとしています。 geom_bar(またはgeom_points、color)を使用しているときに機能しますが、geom_boxplotを使用しているときにアルファ伝説は機能しません。アルファベットとggplot2ボックスプロットの説明文を入力しますか?

library(data.table) 
library(ggplot2) 
dt = data.table(x = rep(1:5,6), y = rnorm(30), tag1 = rep(c('hey', 'what'), 15), tag2 = rep(c('yeah', 'yeah', 'so', 'so', 'so'), 6)) 

それは棒のために働く:

ggplot(dt[, list(y=mean(y)), by=list(x, tag1, tag2)], aes(x=x, y=y, fill=tag1, alpha=tag2, group=interaction(x,tag1,tag2))) + geom_bar(stat = 'identity', position = 'dodge') 

enter image description here

ではなく、箱ひげ図について - アルファ伝説は空です。

ggplot(dt, aes(x=x, y=y, fill=tag1, alpha=tag2, group=interaction(x,tag1,tag2))) + geom_boxplot() 

enter image description here

簡単なバージョンは、塗りなしで行うことができます - /ライトグレーをグレーにバーのデフォルトのように思える、と白/ lightwhiteに箱ひげ図デフォルト:

ggplot(dt[, list(y=mean(y)), by=list(x, tag2)], aes(x=x, y=y, alpha=tag2, group=interaction(x,tag2))) + geom_bar(stat = 'identity') 

enter image description here

ggplot(dt, aes(x=x, y=y, alpha=tag2, group=interaction(x,tag2))) + geom_boxplot() 

enter image description here

しかし、私は本当にこれを修正する方法はわかりません。どのような考えですか?

答えて

3

なぜggplotがボックスプロットの凡例にアルファレベルを実際に提供しないのか分かりませんが、override.aesを使用してハードコードすることはできます。 (編集上の注意:私は、箱のプロットまたは棒グラフのいずれかでアルファの美しさが少し混乱することを知っています。透明度を塗りつぶしの色から精神的に分離するのは難しいです。グレイスケールのアルファ凡例は、プロット)

以下のコードでは、凡例の表示を改善するために、alpha凡例からボックスの行を削除し、凡例のキーの高さを増やしました。私はまた、group引数の必要性を取り除くために美学を編集しました。

ggplot(dt, aes(x=factor(x), y=y, fill=tag1, alpha=tag2)) + 
    geom_boxplot() + 
    scale_alpha_manual(values=c(0.2,0.7)) + 
    guides(alpha=guide_legend(override.aes=list(fill=hcl(c(15,195),100,0,alpha=c(0.2,0.7)), 
               colour=NA))) + 
    theme(legend.key.height=unit(1,"cm")) 

enter image description here

別のオプションは、両方の塗りつぶしとアルファ美学のためinteractionを使用することですが、それはggplotその場合、任意の色が含まれていませんが判明:

ggplot(dt, aes(x=factor(x), y=y, alpha=interaction(tag1,tag2)), 
     fill=interaction(tag1,tag2)) + 
    geom_boxplot() + 
    scale_fill_manual(values=rep(hcl(c(15,195),100,65), 2)) + 
    scale_alpha_manual(values=rep(c(0.3, 1), each=2)) + 
    theme(legend.key.height=unit(2,"cm")) 

enter image description here

代わりに、塗りつぶしの美しさですべてを行うことはできますが、色指定に透明度を含めることができます。これはうまくいきますが、もう一度、透明性と色が視覚的に混ざり合っているため、4つの異なる色を使用する方がよいでしょう。

ggplot(dt, aes(x=factor(x), y=y, fill=interaction(tag1,tag2,sep="-"))) + 
    geom_boxplot() + 
    scale_fill_manual(values=hcl(c(15,195,15,195),100,65, alpha=c(0.4,0.4,1,1))) + 
    theme(legend.key.height=unit(1,"cm")) + 
    labs(fill="Tag 1 - Tag 2") 

enter image description here

+0

ありがとう! barとboxplotの動作が違っていて、手動で固定する必要があるのは奇妙ですが、これは間違いありません!私は、この例ではアルファが混乱していることに同意します。私の最終的な結果では、理論的な結果(透明)と、サンプリングエラーなどにより得られるより厄介な結果とを区別するためにアルファを使用しています。 – benjamin

関連する問題