仅从ggplot中的一层中删除轮廓颜色

Dro*_*nas 5 r ggplot2

我使用以下命令创建了一个由三层(小提琴图、箱图和蜂群图)组成的图表

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))
Run Code Online (Sandbox Code Playgroud)

剧情是 这样的。 然而,我希望小提琴是箱线图下方的简单阴影区域,即具有透明填充,但没有轮廓,这样箱线和小提琴的线条就不会冲突,并且图形更容易查看。

我的问题是,我不知道如何仅在该特定图层 ( ) 中将alpha 设置color为零,同时保持其他图层的轮廓可见。同样地影响所有图层,因此如果我将 alpha 设置为零,那么框和点就会失去其轮廓,这是我不希望的。确实有一个参数,但这仅影响颜色的透明度,因此也不能解决问题。geom_violin()scale_color_manualgeomgeom_violinalphafill

这就是我想要实现的目标*。(*请注意,我使用Inkscape手动删除轮廓。)

一般来说,我想知道是否可以为同一图的不同层设置不同的 alphafillcolor