R 小提琴图和箱线图一起,使填充仅对箱线图表现不同

Poi*_*ewq 6 r ggplot2 melt reshape2

好的,所以我想将小提琴图与白色箱线图一起绘制,但我的数据有点棘手。我将 data.frame 中的数据与几列融合在一起,每列都有对应于两个级别的因子的值,这是我的数据的近似值:

library(ggplot2)
library(reshape2)

dat <- list(
  A = rbind(
    data.frame(group = "1",
               vals = rnorm(500)),
    data.frame(group = "2",
               vals = rnorm(100))
  ),
  B = rbind(
    data.frame(group = "1",
               vals = rnorm(500)),
    data.frame(group = "2",
               vals = rnorm(100))
  ),
  C = rbind(
    data.frame(group = "1",
               vals = rnorm(500)),
    data.frame(group = "2",
               vals = rnorm(100))
  )
)

dat.melt <- melt(dat)
Run Code Online (Sandbox Code Playgroud)

我能找到的最好的方法是手动设置填充,但它会影响小提琴图和箱线图:

dodge <- position_dodge(width = 1)

p <- ggplot(dat.melt, aes(x = L1, y = value, fill = group))+
  geom_violin(position = dodge)+
  geom_boxplot(width = 0.3,
                 position = dodge,
                 outlier.shape = NA)+
  scale_fill_manual(values=c("white", "white"))
Run Code Online (Sandbox Code Playgroud)

说情节

我可以只制作白色的箱线图而不是小提琴吗?

PS如何只为小提琴制作图例而不显示箱线图?

Mar*_*dri 7

Try this:

p <- ggplot(dat.melt, aes(x = L1, y = value)) +
  geom_violin(aes(fill = group), position = dodge) +
  geom_boxplot(aes(group=interaction(group,L1)), 
            width=0.3, fill="white", position=dodge,
            outlier.shape=NA)
print(p)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • @Jimbou,你得到这个错误是因为你没有设置`dodge &lt;- position_dodge(width = 1)` (2认同)