将统计测试与rstatix和每种类别的颜色填充相结合

问题描述

我使用以下代码通过ggplot2绘制小提琴图:

Cells1 %>%
  ggplot(aes(x=IR_time,y=AreaShape_Area,fill=IR_time)) +
  geom_violin(col=NA) +
  guides(fill=FALSE) + 
  stat_summary(fun.data=data_summary,col = "black") +
  theme_gray() + 
  ggtitle("Cell area after irradiation (3Gy)") +
  ylab("\nArea (pixels)") + 
  xlab("\nDays after exposure to 3Gy\n") +
  scale_fill_manual(values=wes_palette(n=5,name="Moonrise3")) +
  theme(
    plot.title = element_text(size=16),axis.title = element_text(size=12,face="bold"),axis.text = element_text(size=12))

这将产生以下情节:

Violin plot

现在,我要执行统计检验(此处为成对t检验),并将结果添加到绘图中。我使用rstatix包。 所以这是新代码

stat.test <- Cells1 %>%  pairwise_t_test(AreaShape_Area ~ IR_time,pool.sd=FALSE,p.adjust.method="bonferroni",ref.group="0") %>% 
  add_y_position()

    Cells1 %>%
      ggplot(aes(x=IR_time,fill=IR_time)) +
      geom_violin(col=NA) +
      guides(fill=FALSE) + 
      stat_summary(fun.data=data_summary,col = "black") +
      theme_gray() + 
      ggtitle("Cell area after irradiation (3Gy)") +
      ylab("\nArea (pixels)") + 
      xlab("\nDays after exposure to 3Gy\n") +
      scale_fill_manual(values=wes_palette(n=5,name="Moonrise3")) +
      theme(
        plot.title = element_text(size=16),axis.text = element_text(size=12)) +
      stat_pvalue_manual(stat.test) 

但这会导致此错误

错误:美学的长度必须为1或与数据(4)相同:填充

显然,这来自aes()中的fill = IR_time参数。 如果我用fill =“ blue”代替它,则可以使用,但没有错误消息。 但是我想同时使用两种颜色,具体取决于IR_time和绘图的统计信息。

您是否知道如何解决

解决方法

我用相同的名称创建了一个大致相似的数据集:

set.seed(69)

Cells1 <- data.frame(
            IR_time = factor(rep(c(0,2,4,8,12),each = 1000)),AreaShape_Area = rgamma(5e3,rep((2:6)^1.8,each = 1e3)) * 3e3)

您的代码需要一个名为data_summary的函数,您没有包含它,而且似乎也没有在我可以在Google上找到的任何常见R包中。我猜是这样的:

data_summary <- function(x) {
  data.frame(y = mean(x),ymin = mean(x) - sd(x),ymax = mean(x) + sd(x))
}

您没有包括正在使用的软件包,因此需要花费一些侦探才能弄清楚我们是否需要:

library(ggplot2)
library(wesanderson)
library(rstatix)
library(ggpubr)

现在,我们可以运行您的代码。据我所知,如果将行stat_pvalue_manual(stat.test)更改为stat_pvalue_manual(data = stat.test,inherit.aes = FALSE),这应该很容易解决:

stat.test <- Cells1 %>%  
  pairwise_t_test(AreaShape_Area ~ IR_time,pool.sd = FALSE,p.adjust.method = "bonferroni",ref.group = "0") %>% 
  add_y_position()

Cells1 %>%
  ggplot(aes(x = IR_time,y = AreaShape_Area,fill = IR_time)) +
  geom_violin(col = NA) +
  guides(fill = FALSE) + 
  stat_summary(fun.data = data_summary,col = "black") +
  theme_gray() + 
  ggtitle("Cell area after irradiation (3Gy)") +
  ylab("\nArea (pixels)") + 
  xlab("\nDays after exposure to 3Gy\n") +
  scale_fill_manual(values = wes_palette(n = 5,name = "Moonrise3")) +
  theme(
    plot.title = element_text(size = 16),axis.title = element_text(size = 12,face = "bold"),axis.text  = element_text(size = 12)) +
  stat_pvalue_manual(data = stat.test,inherit.aes = FALSE) 

reprex package(v0.3.0)于2020-09-30创建

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...