2

我正在尝试创建一个分组小提琴图(见图),其中我为四个分类变量绘制了 3 个级别。考虑到数据,除了方框与后面较宽的小提琴图颜色相同使得它们难以查看之外,该图的结果很好。理想情况下,我希望所有盒子始终保持白色。我知道这些盒子改变颜色的原因是为了响应fill我选择的。我想知道是否有办法将填充geom_violingeom_boxplot.

这是我正在使用的精简代码

p <- ggplot(df, aes(x=metric, y=value, fill=variable))+
geom_violin(width=0.9, position=position_dodge(0.75), bw=1.5)+
geom_boxplot(width=0.3, outlier.shape = NA, position=position_dodge(0.75))+
scale_fill_manual(values=c("gray50", "gray75", "gray100"),
                breaks=c("res.error.random", "res.error.increase", "res.error.decrease"),
                labels=c("random cost", "overestimated", "underestimated"))

我正在创建的情节示例

4

1 回答 1

2

一切都取决于你写的地方fill

  • inside ggplot(aes()):将关注所有新层。
  • inside geom_boxplot(aes()):只关注这一层。

把它写在里面很重要aes,特别是如果你想scale_fill_manual()稍后使用它。

这是生成数据的完整答案:

df <- data.frame(var1 = sample(c("A", "B", "C"), 50, replace =T),
             var2 = sample(c("group1", "group2", "group3"), 50, replace =T),
             value = sample(c(1,2,3,4,5,6,7,8,9,10), 50, replace =T))

boxplot1.和violin[ ggplot(aes(fill =))]的颜色相同:

ggplot(df, aes(x=var1, y=value, fill = var2, group = interaction(var1,var2))) +
geom_violin(width=0.9, position=position_dodge(0.75), bw=1.5) +
geom_boxplot(width=0.3, outlier.shape = NA, position=position_dodge(0.75))

在此处输入图像描述


2.不同颜色[ geom_violin(aes(fill =))]:

ggplot(df, aes(x=var1, y=value, group = interaction(var1,var2)))+
geom_violin(width=0.9, position=position_dodge(0.75), bw=1.5, aes(fill = var2))+
geom_boxplot(width=0.3, outlier.shape = NA, position=position_dodge(0.75), fill = "white")

在此处输入图像描述

于 2016-04-26T11:42:59.637 回答