2016-11-15 51 views
5

Alfa birleştirmek ve ggplot2 doldurmak çalışıyorum. Geom_bar (veya renk için geom_points) kullandığımda çalışır, ancak geom_boxplot kullandığımda alfa efsanesi çalışmaz.alpha ve ggplot2 boxpots içindeki efsaneleri doldurun mu?

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)) 

Bu barlar için çalışır: Boxplot için

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

Ama - alfa efsane boştur.

enter image description here

daha basit bir sürümünü

ggplot(dt, aes(x=x, y=y, fill=tag1, alpha=tag2, group=interaction(x,tag1,tag2))) + geom_boxplot() 
hiçbir dolgu ile yapılabilir -/açıkGri gri çubuk varsayılan gibi görünüyor ve beyaz/lightwhite için boxplot varsayılan:

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

Ama bu .. Herhangi bir düşünce nasıl düzeltileceği gerçekten emin değilim?

cevap

3

Neden ggplot'un neden aldığım kutucukları için alfa düzeylerini sağlamadığından emin değilim, ancak override.aes'u kullanarak kod yazabilirsiniz. (Editörün notu: Ben bulmak alfa Boxplot veya çubuk arsa biri için kafa karıştırıcı biraz bir estetize Hiçbir şey griye eşleştirilmiş çünkü zihinsel sorununu içinden çıkılmaz hale dolgu rengi ve gri ölçekli alfa efsaneden şeffaflığı ayırmak zor. arsa.)

Aşağıdaki kodda, efsanenin görünürlüğünü iyileştirmek için, kutu satırlarını alpha göstergesinden çıkardım ve gösterge anahtarı yüksekliğini artırdım. Ayrıca, group argümanına olan ihtiyacı ortadan kaldırmak için estetiği de düzenledim.

enter image description here

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")) 
Diğer bir seçenek dolgu ve alfa estetik hem de interaction kullanmak olacaktır, ancak bu durumda herhangi bir renk içermez ggplot çıkıyor:

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

Yani, bunun yerine dolgu estetiği ile her şeyi, ama renk şartnamede şeffaflığı içerebilir. Bu, ancak bir kez daha, çünkü şeffaflık ve renk görsel algıya biraz karışmış olduğundan, sadece dört farklı renkle gitmek daha iyidir.

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

teşekkürler! Bar ve boxplot arasında farklı bir davranış olduğu ve bunun elle düzeltilmesi gerektiği garip, ama kesinlikle işe yarıyor! Bu örnekte alfanın kafa karıştırıcı olduğunu kabul ediyorum. Benim nihai sonucu olarak, ben yüzden * daha okunaklı olduğunu düşünüyorum * vb teorik sonuç (saydam) ve örnekleme hatası nedeniyle olsun daha dağınık sonucu ayırt etmek alfa kullanıyorum. – benjamin