Цвет на gggplot с полосами значимости

#r #ggplot2

#r #ggplot2

Вопрос:

У меня возникли проблемы с созданием цветных графиков скрипки на ggplot. Я нашел обходной путь для создания графиков с линиями значимости между графиками скрипки, это включает в себя создание отдельных фреймов данных, а затем добавление их в виде geom_lines к исходному графику.

Изначально я хотел, чтобы графики были серыми, однако теперь это изменилось, и я хотел бы, чтобы графики скрипки были окрашены. Однако, похоже, это не работает.

Ниже приведен мой код для графиков серой скрипки (который работает):

 df1 <- data.frame(a = c(1, 1:2,2), b = c(1.5, 1, 1, 1.5))
df2 <- data.frame(a = c(1, 1:3,3), b = c(0.5, 0, 0, 0, 0.5))
df3 <- data.frame(a = c(1, 1:4,4), b = c(-0.5, -1, -1, -1, -1, -0.5))
df4 <- data.frame(a = c(2, 2:3,3), b = c(15, 15.5, 15.5, 15))
df5 <- data.frame(a = c(2, 2:4,4), b = c(16, 16.5, 16.5, 16.5, 16))
df6 <- data.frame(a = c(3, 3:4,4), b = c(17, 17.5, 17.5, 17))

  pp <- EditedDF1 %>% 
  ggplot(aes(x=ct_marshallFAC, y=logGFAP))   
  geom_violin(fill="#CCCCCC")  
  stat_summary(fun.y=median, geom="point", size=2, color="red")  
  geom_boxplot(width=0.1, outlier.shape = NA)  
  theme_classic()  
  theme(axis.title.x = element_blank(), axis.text.x = element_blank(), 
  axis.ticks.x = element_blank())  `
  labs(x="", y= "Log GFAP(ng/ml)")  
  ylim(-2, 18)   
  theme(legend.position="bottom")

  pp

  aa <- pp  
  geom_line(data = df1, aes(x = a, y = b))   annotate("text", x = 1.5, y 
  = 0.2, label = "***", size = 6 )  
  geom_line(data = df2, aes(x = a, y = b))   annotate("text", x = 1.5, y 
  = -0.8, label = "***", size = 6)  
  geom_line(data = df3, aes(x = a, y = b))   annotate("text", x = 1.5, y 
  = -1.8, label = "***", size = 6)  
  geom_line(data = df4, aes(x = a, y = b))   annotate("text", x = 2.5, y 
  = 15.8, label = "***", size = 6)  
  geom_line(data = df5, aes(x = a, y = b))   annotate("text", x = 2.5, y 
  = 16.8, label = "***", size = 6)  
  geom_line(data = df6, aes(x = a, y = b))   annotate("text", x = 3.5, y 
  = 17.8, label = "*", size = 6) 
 

Как только я добавлю код для цвета, такой как:

 pp <- EditedDF1 %>% 
ggplot(aes(x=ct_marshallFAC, y=logGFAP, fill=EditedDF1$ct_marshallFAC)) 
  
geom_violin()   (The rest of the above)
 

он окрашивает графики скрипки, но удаляет линии значимости из графика, не запуская раздел геометрических линий и указывая: Ошибка: Эстетика должна быть либо длиной 1, либо такой же, как у data (4): fill

или

     pp <- EditedDF1 %>% 
  ggplot(aes(x=ct_marshallFAC, y=logGFAP))   
  geom_violin(fill=ct_marshallFAC)   (The rest of the above)
 

в нем говорится: Ошибка: эстетика должна быть либо длиной 1, либо такой же, как у данных (2048): заполнить

Я был бы очень признателен за любую помощь в этом вопросе, поскольку я чувствую, что добавить цвет должно быть просто, но это не доказывает этого!

Большое спасибо,

Dan

Ответ №1:

Каждый geom_line вызов наследует все предыдущие aes() назначения, включая заполнение. Используйте inherit.aes = FALSE в каждом вызове для быстрого исправления:

 ...
geom_line(..., inherit.aes = FALSE)  
...
 

Надеюсь, это должно сработать, но если нет, могут быть другие вещи, требующие изменения. Опубликуйте образец / воспроизводимый пример кода, который, надеюсь, поможет вам перейти к рабочему коду.