【发布时间】:2018-05-23 13:40:10
【问题描述】:
我使用以下方法创建了一个由三层组成的图(小提琴图、箱图和蜂群图)
library(ggplot2)
library(ggbeeswarm)
df <- data.frame(var1 = sample(c("Condition A", "Condition B"), 50, replace =T),
var2 = sample(c("Group 1", "Group 2"), 50, replace =T),
value = sample(c(1,2,3,4,5,6,7,8,9,10), 50, replace =T))
ggplot(df, aes(x=var1, y=value, fill = var2, group = interaction(var1,var2))) +
geom_violin(position = position_dodge(0.8)) +
geom_boxplot(position = position_dodge(0.8), width = .6, outlier.shape = NA) +
# from ggbeeswarm
geom_quasirandom(method = "pseudorandom", dodge.width=0.8, size = 3, alpha = 0.6) +
scale_fill_manual(values=alpha(c("#848484","#0F185B"), .3)) +
scale_color_manual(values=c("#848484","#0F185B")) +
theme_bw() +
theme(text = element_text(size=15))
剧情看起来 like this. 但是,我希望小提琴是箱线图下方的简单阴影区域,即使用透明填充但没有轮廓,这样箱线和小提琴的线条不会发生冲突,并且图表更易于查看。
我的问题是我不知道如何在此特定图层 (geom_violin()) 中将 color 的 alpha 设置为零仅,同时保持其他图层的轮廓可见。 scale_color_manual 同等影响所有geom 层,所以如果我在那里将 alpha 设置为零,那么框和点会失去它们的轮廓,这是我不想要的。 geom_violin 确实有一个 alpha 参数,但这只会影响 fill 颜色的透明度,因此也不能解决问题。
This is what I want to achieve*.(*请注意,我使用Inkscape手动删除轮廓。)
一般来说,我想知道是否可以为同一绘图的不同层为fill 和color 设置不同的alpha 值。
【问题讨论】: