Вот один из подходов к этому:
Чтобы получить сокращения месяца, я мог бы рассмотреть вопрос о сохранении месяца как POSIXct
. Используя floor_date
, вы можете получить месяц для каждого момента времени и сохранить его в нужном формате. При построении графика вы можете использовать scale_x_datetime
и указать метку, которую вы хотели бы использовать на xaxis. В этом случае %b
предоставит сокращение месяца.
Чтобы сделать доверительный интервал 95%, необходимо рассмотреть различные подходы. Один из способов - вручную вычислить 95% -й КИ. Обратите внимание, что здесь сделаны предположения (основанные на распределении по студенту). В этом случае я использовал geom_ribbon
с некоторой прозрачностью (альфа. 2), чтобы показать интервал между точками. В качестве альтернативы этому, вы можете использовать stat_summary
, который будет вычислять среднее значение и 95% CI и отображаться в ggplot
.
#group by month and take the mean of that month
a <- CleanTempSal %>%
group_by(month = floor_date(Date...Time, unit = "month")) %>%
summarise(month_mean = mean(Temp..C.),
sd = sd(Temp..C.),
n = n()) %>%
mutate(se = sd / sqrt(n),
lower.ci = month_mean - qt(1 - (.05/2), n - 1) * se,
upper.ci = month_mean + qt(1 - (.05/2), n - 1) * se)
#plot mean monthly temp
ggplot(a, aes(x = month, y = month_mean)) +
geom_point(aes(color = month_mean)) +
geom_line(aes(color = month_mean)) +
geom_ribbon(aes(ymin = lower.ci, ymax = upper.ci), alpha = 0.2) +
scale_color_gradient("Temp", low = "blue", high = "red4") +
scale_x_datetime(date_breaks = "1 month", date_labels = "%b") +
labs(x = "Month of 2017",
y = "Water Tempearture (C)",
title = "Monthy Mean Water Temperature",
subtitle = "NCBS Dock - Cedar Key, FL")
График
![plot with 95% CI and xaxis labels with months](https://i.stack.imgur.com/ITQ9P.png)
Редактировать (4/16/20):
Если у вас есть данные за несколько лет, при расчете SD и SE следует группировать по месяцам и годам:
group_by(month = floor_date(Date...Time, unit = "month"), year)
Кроме того, я изменил ggplot
, чтобы вместо полос отображались полосы ошибок. Внесены некоторые незначительные изменения в ширину полос ошибок, включая использование as.Date(month)
и scale_x_date
.
#group by month and take the mean of that month
a <- CleanTempSal %>%
group_by(month = floor_date(Date...Time, unit = "month"), year) %>%
summarise(month_mean = mean(Temp..C.),
sd = sd(Temp..C.),
n = n()) %>%
mutate(se = sd / sqrt(n),
lower.ci = month_mean - qt(1 - (.05/2), n - 1) * se,
upper.ci = month_mean + qt(1 - (.05/2), n - 1) * se)
#plot mean monthly temp
ggplot(a, aes(x = as.Date(month), y = month_mean)) +
geom_point(aes(color = month_mean)) +
geom_line(aes(color = month_mean)) +
#geom_ribbon(aes(ymin = lower.ci, ymax = upper.ci), alpha = 0.2) +
geom_errorbar(aes(ymin = month_mean - se, ymax = month_mean + se), width = 1) +
scale_color_gradient("Temp", low = "blue", high = "red4") +
scale_x_date(date_breaks = "1 month", date_labels = "%b %y") +
labs(x = "Month",
y = "Water Tempearture (C)",
title = "Monthy Mean Water Temperature",
subtitle = "NCBS Dock - Cedar Key, FL")
График
![plot with error bars](https://i.stack.imgur.com/RwnLX.png)
Данные
CleanTempSal <- structure(list(Date...Time = structure(c(1485914400, 1485918000,
1485921600, 1485925200, 1485928800, 1485932400, 1485936000, 1485939600,
1490108400, 1490112000, 1490115600, 1490119200), class = c("POSIXct",
"POSIXt"), tzone = ""), Temp..C. = c(14.87, 14.77, 15.08, 15.08,
14.96, 14.87, 15.05, 15.05, 18.87, 19.32, 19.97, 20.44), Salinity.psu. = c(14.58,
14.52, 14.44, 14.46, 14.56, 14.67, 14.78, 14.88, 18.78, 18.81,
19.41, 19.16), Conduc.mS.cm. = c(19.33, 19.21, 19.26, 19.28,
19.34, 19.44, 19.66, 19.78, 26.67, 26.96, 28.14, 28.09), month = c(1,
1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3), month2 = c("Jan", "Jan", "Jan",
"Jan", "Feb", "Feb", "Feb", "Feb", "Mar", "Mar", "Mar", "Mar"
), year = c(2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017,
2017, 2017, 2017), hour = c(20L, 21L, 22L, 23L, 0L, 1L, 2L, 3L,
10L, 11L, 12L, 13L)), class = "data.frame", row.names = c(NA,
-12L))