#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 приветствую, я ценю, что вы приложили усилия к своим вопросам, в отличие от большинства пользователей.