Обозначьте нижний и верхний доверительные интервалы числовыми значениями с помощью geom_text()

#r #ggplot2 #dplyr #graphics #confidence-interval

#r #ggplot2 #dplyr #графика #доверительный интервал

Вопрос:

Проблема

Я создал график 1 (см. Код R ниже), используя пакет ggplot (), и моя конечная цель — пометить как верхние, так и нижние строки доверительного интервала их значениями до 3 значащих цифр (указанных в таблице ниже) на графике, совместив эти метки с верхними и нижними столбцами ошибок (см. график 3).

Я попытался манипулировать кодом (график 2) с помощью geom_text() (см. Код R ниже); однако вместо того, чтобы пометить любую полоску доверительного интервала, я случайно поместил ошибочные числовые метки (которых нет в моей таблице данных) на каждую среднюю точку месяца в месяц. Когда я запустил код для графика 2, фоновая сетка и цвет фона также вернулись, и я бы предпочел оставить фон на моем графике пустым (графики 1 3).

Желаемый результат

Я хотел бы создать график, похожий на график 3 (см. Ниже), пометив связанные значения ci_low и ci_high в таблице таким же образом.

Если кто-нибудь может помочь мне решить эту проблему, я был бы глубоко признателен.

Спасибо 🙂

Ключ таблицы:

  • ci_low = нижний доверительный интервал
  • ci_high = более высокий доверительный интервал
  • S.E = стандартная ошибка
  • Среднее значение.Месяц = среднее количество наблюдений в месяц
  • sd.Месяц = стандартное отклонение в месяц

Таблица:

 Merged_Blue_Whale_Summarised <- read.table(text = "
       Month Counts Mean.Month  sd.Month       S.E    ci_low    ci_hi
1    January    113   37.66667  5.686241  3.282953 31.232080 44.10125
2   February     94   31.33333  4.932883  2.848001 25.751251 36.91542
3      March    111   37.00000  5.291503  3.055050 31.012101 42.98790
4      April    111   37.00000 12.288206  7.094599 23.094586 50.90541
5        May     33   11.00000  7.937254  4.582576  2.018152 19.98185
6       July     16    8.00000  1.414214  1.000000  6.040000  9.96000
7     August     89   29.66667  9.291573  5.364492 19.152262 40.18107
8  September     86   28.66667 16.441817  9.492687 10.061000 47.27233
9    October     82   27.33333 12.503333  7.218803 13.184480 41.48219
10  November     81   27.00000 17.691806 10.214369  6.979837 47.02016
11  December    101   33.66667  4.041452  2.333333 29.093333 38.24000", header = TRUE)
# fix the month names order
Merged_Blue_Whale_Summarised$Month <- factor(Merged_Blue_Whale_Summarised$Month, levels = month.name)
  

R-код

 library(ggplot2)

##Open a new window to plot the figure showing mean, and confidence intervals per month
dev.new()

####Code for plot 1

           p = ggplot(Merged_Blue_Whale_Summarised, aes(x=Month, y=Mean.Month, ymin=ci_low, ymax=ci_hi))  
                      geom_line(aes(group=1), size=1)  
                      geom_errorbar(width=0.2, color="blue")   
                      geom_point(size=2)   
                      geom_label(aes(y=60, label=paste0("n=", Counts))) 
           
           p   theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
                          panel.background = element_blank(), axis.line = element_line(colour = "black"))
           
           ggsave("p.png", p)

p

##Code for plot 2

 p = ggplot(Merged_Blue_Whale_Summarised, aes(x=Month, y=Mean.Month, ymin=ci_low, ymax=ci_hi))  
                  geom_line(aes(group=1), size=1)  
                  geom_errorbar(width=0.2, color="blue")   
                  geom_point(size=2)   
                  geom_label(aes(y=60, label=paste0("n=", Counts))) 
       
       p   theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
                      panel.background = element_blank(), axis.line = element_line(colour = "black"))
       
       p   geom_text(aes(label= sprintf("%.1f", ci_low, ci_hi), vjust=1.6,
                         color="black",
                         size=3.5))

       p
  

график 1

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

График 2

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

График 3

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

Ответ №1:

Нам нужно будет вызвать geom_text дважды, попробуйте:

 ggplot(Merged_Blue_Whale_Summarised, aes(x=Month, y=Mean.Month, ymin=ci_low, ymax=ci_hi))  
  geom_line(aes(group=1), size=1)  
  geom_errorbar(width=0.2, color="blue")   
  geom_point(size=2)   
  geom_label(aes(y=60, label=paste0("n=", Counts)))  
  # add high values
  geom_text(data = Merged_Blue_Whale_Summarised,
            aes(x = Month, y = ci_hi, label= sprintf("%.1f", ci_hi), vjust=-1.6))  
  # add low values
  geom_text(data = Merged_Blue_Whale_Summarised,
            aes(x = Month, y = ci_low, label= sprintf("%.1f", ci_low), vjust=1.6))  
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"))
  

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

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

1. Большое вам спасибо, zx8754, я действительно оценил вашу помощь.

2. @AliceHobbs приветствую, я ценю, что вы приложили усилия к своим вопросам, в отличие от большинства пользователей.