如何获得与绘制在一个图中的箱形图和小提琴图(ggplot /使用geom_split_violin)相关的不同颜色?

时间:2019-01-09 17:41:04

标签: r ggplot2 boxplot violin-plot

我试图在其中显示一个箱形图和一个小提琴图。

我可以根据处理情况填写箱形图和小提琴图的颜色。但是,我不希望它们使用完全相同的颜色,我希望小提琴图或箱线图填充物更轻。

另外,如果我将col=TM添加到aes的{​​{1}}中,则能够获得不同颜色的箱线图。但是,那么我就无法选择这些颜色或不知道该怎么做(它们现在会自动变成粉红色和蓝色)。

背景:

我正在使用看起来像这样的数据集:

geom_boxplot

我正在根据每次治疗(TM yax X Zscore Org zscore zhfa -1.72 Org zscore zfwa -0.12 的{​​{1}}(zhfa e.d.)绘制z分数。

X

现在,小提琴图的一半用白色填充,但不是两个都用(这会更好)。如果我绘制TM,它将获得与箱图完全相同的颜色。

此外,zhfa的小提琴图应位于左侧,但会切换并显示在右侧,同时与有机(左)箱形图的数据匹配。

现在的图形:

我不知道是否可以通过添加与scale_fill_manual相关的内容来解决该问题,或者这是否是不可能的请求

样本数据:

#Colours
ocean = c('#BBDED6' , '#61C0BF' , '#FAE3D9' , '#FFB6B9' )

## Plot ##
z <- ggplot(data = data, aes(x = X, y = Zscore,fill=TM)) +
      geom_split_violin(col="white", fill="white")  +
      geom_boxplot(alpha = 1, width=0.3, aes(fill=TM), position = position_dodge(width = 0.3))          

z + theme(axis.text = element_text(size = 12),legend.position="top")  +
    stat_compare_means(method="t.test", label.y=2.8, label.x=0.3, size=3) +
    scale_fill_manual(values=ocean, labels=c("Mineral fertilizer", "Organic fertilizer"))  

1 个答案:

答案 0 :(得分:0)

您可以在数据中添加与TM相同结构但值不同的其他列,然后缩放填充:

样本数据:

data <- data.frame(TM = c(rep("org", 5), rep("min", 5),rep("org", 5), rep("min", 5),rep("org", 5), rep("min", 5)),
                 Zscore = runif(30,-2,2),
                 X = c(rep("zwfa", 10), rep("zhfa", 10), rep("zbfa", 10)))

开始解决方案:

data <- data %>% mutate(TMm = c(rep("orgM", 5), rep("minM", 5),rep("orgM", 5), rep("minM", 5),rep("orgM", 5), rep("minM", 5)))
#Colours
ocean = c('#BBDED6' , '#FAE3D9', '#61C0BF'  , '#FFFFFF')

## Plot ##
z <- ggplot(data = data, aes(x = X, y = Zscore,fill=TM)) +
  geom_split_violin(mapping = aes(fill=TMm))  +
  geom_boxplot(alpha = 1, width=0.3, aes(fill=TM), position = position_dodge(width = 0.3))          

z + theme(axis.text = element_text(size = 12),legend.position="top")  +
  stat_compare_means(method="t.test", label.y=2.8, label.x=0.3, size=3) +
  scale_fill_manual(breaks = c("org", "min"), values=ocean, labels=c("Mineral fertilizer", "Organic fertilizer"))

在数据中,您可能必须将breaks = c("org", "min")更改为TM变量中的因子水平

或者如果您想要整个小提琴图为白色:

ocean = c('#BBDED6' , '#FFFFFF', '#61C0BF' , '#FFFFFF')

新剧情: