如何获得与箱线图和小提琴图(ggplot / 使用 geom_split_violin)的处理相关的不同颜色,这些颜色被绘制成一个?

How to get different colors related to treatment for boxplot and violin plot (ggplot / using geom_split_violin) that are plotted in one?

我正在尝试将箱线图和小提琴图合二为一。

我可以根据处理方式填充箱线图和小提琴图的颜色。但是,我不希望它们的颜色完全相同,我希望小提琴图或箱线图的填充颜色更浅。

此外,如果我将 col=TM 添加到 geom_boxplotaes,我可以获得不同颜色的箱线图的外线。但是,然后我不能选择这些颜色或不知道如何选择(它们现在自动为粉红色和蓝色)。

背景:

我正在处理一个看起来像这样的数据集:

TM        yax    X       Zscore
Org   zscore  zhfa    -1.72
Org   zscore  zfwa    -0.12

我正在根据每个处理 (TM).X (zhfa e.d.) 绘制 z-scores。

#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"))  

现在,一半的小提琴图被填充为白色,但不是两个都填充了白色(这样就更好了)。如果我绘制 geom_split_violin() 它会得到与箱线图完全相同的颜色。

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

现在的图表:

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

示例数据:

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)))

您可以向数据中添加一个与 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')

新情节: