Как я могу добавить отдельные точки данных к моему столбчатому графику с помощью ggbarplot? (добавить дрожание не работает, и не работает dotplot)

#r #ggplot2 #plot #ggpubr

#r #ggplot2 #сюжет #ggpubr

Вопрос:

Мне сложно добавлять отдельные точки данных на мои гистограммы с помощью ggbarplot. Кажется, у меня есть проблема, особенно с многогрупповыми данными (с использованием заливки или цвета). Я пробовал несколько разных способов добавления точек, но они либо привели к ошибке (добавление дрожания), либо точки неправильно выровнены по правильной линейке (добавление точечной диаграммы). Любая помощь была бы очень признательна.

Пример данных:

 library(ggpubr)


#dataframe
ER <- read.table(header=TRUE, text="
  Sex  Group ER
  M    V     1046
  M    V     1290
  M    Z     1202
  M    Z     1056
  F    V     8000
  F    V     7859
  F    Z     4000
  F    Z     3409
")
  

Я могу заставить его работать, если использую «add = c (point)», но когда я пытаюсь использовать «add = c (jitter)», это приводит к ошибке («position_jitterdodge ()» требует хотя бы одной эстетики для уклонения. Я видел похожие вопросы, задаваемые здесь, но обычно они решались путем добавления фактора группировки к «Заливке» вместо «цвета». Я пробовал оба варианта, но ни один из них не сработал.

 e <- ggbarplot(ER, x = "Sex", y = "ER", title = "Arcuate Nucleus",
                 ylab= "ER Labeling", xlab = "Group", color = "Group",
                 add = c("mean_se", "jitter"), add.params = list(color = "black"), palette = "jco",
                 position = position_dodge(.8)) 
print(e) 
  

Попытка использовать «add = c («dotplot)» приводит к тому, что точки смешиваются между моей второй группой и отображаются между двумя соседними группами.

 e2 <- ggbarplot(ER, x = "Sex", y = "ER", title = "Arcuate Nucleus",
                 ylab= "ER Labeling", xlab = "Group", color = "Group",
                 add = c("mean_se", "dotplot"), add.params = list(color = "black"), palette = "jco",
                 position = position_dodge(.8)) 
print(e2) 
  

Кажется, это работает … но я бы очень хотел использовать разные цвета, формы и добавить дрожание. Пример ниже.

 e3 <- ggbarplot(ER, x = "Sex", y = "ER", title = "Arcuate Nucleus",
                 ylab= "ER Labeling", xlab = "Group", color = "Group",
                 add = c("mean_se", "point"), add.params = list(color = "black"), palette = "jco",
                 position = position_dodge(.8))   theme(axis.line = element_line(size = 0.9), axis.ticks = element_line(size = 0.9)) 

print(e3)
  

введите описание изображения здесь

Ответ №1:

Проблема в том, что add.params(color = "black") вы перезаписываете grouping ( color = "Group" ), необходимую для уклонения от точек. Следовательно, удаление add.params(color = "black") заставит ваш код работать. Если вам нужны черные точки и полосы ошибок, вы можете сделать это, например scale_color_manual , установив цвета для всех групп на "black" :

 library(ggpubr)
#> Loading required package: ggplot2

ER <- read.table(header=TRUE, text="
  Sex  Group ER
  M    V     1046
  M    V     1290
  M    Z     1202
  M    Z     1056
  F    V     8000
  F    V     7859
  F    Z     4000
  F    Z     3409
")

ggbarplot(ER, x = "Sex", y = "ER", title = "Arcuate Nucleus",
               ylab= "ER Labeling", xlab = "Group", color = "Group", fill = "Group",
               add = c("mean_se", "jitter"), palette = "jco",
               position = position_dodge(.8))  
  scale_color_manual(values = c(V = "black", Z = "black"))
  

Редактировать

Проблема в том, что подобные пакеты ggpubr предлагают многое из коробки. «Цена», которую за это платят, заключается в том, что готовые решения имеют свои ограничения. Если вы хотите иметь больше контроля над внешним видом вашего графика, вы должны сделать это (хотя бы частично) с помощью ggplot2, например, чтобы раскрасить точки, которые вы можете использовать для дрожащих точек geom_jitter . Здесь я изменяю форму точек, чтобы добавить черный контур. К сожалению, невозможно изменить fill цвет, а также для дрожания требуется заливка aes:

 ggbarplot(ER, x = "Sex", y = "ER", title = "Arcuate Nucleus",
          ylab= "ER Labeling", xlab = "Group", color = "Group", fill = "Group",
          add = c("mean_se"), palette = "jco",
          position = position_dodge(.8))  
  scale_color_manual(values = c(V = "black", Z = "black"))  
  geom_jitter(aes(Sex, ER, fill = Group), shape = 21, color = "black",  position = position_jitterdodge(jitter.height = .1, jitter.width = .2))
  

Другим вариантом было бы использовать, например

 geom_jitter(aes(Sex, ER, fill = Group), color = "grey",  position = position_jitterdodge(jitter.height = .1, jitter.width = .2))
  

что дает вам «заполненные», например, «серые» точки, но без контура.

Комментарии:

1. Есть ли способ сделать полосы ошибок черными, но точки другого цвета, например, белые с черным контуром?

2. Привет @LauraCortes. Я только что внес правку, чтобы показать вам два варианта окрашивания точек по-разному. Лучший S.

3. Большое спасибо @stefan