Мой код ниже. Он должен повториться. Это код для загрузки данных, обработки данных, построения линии лёсса и последующего добавления графика.
library(tidyverse)
library(macleish)
library(lubridate)
mydata <- whately_2015
mydata <- whately_2015 %>%
dplyr::select(temperature, when) %>%
mutate(when = as_date(mydata$when), temperature = temperature * (9/5)+32)
mydata$seasons <- as.character(c(rep("Winter", 11232), rep("Spring", 24624-11232), rep("Summer", 38161-24624), rep("Autumn", 50976-38161), rep("Winter", 52560-50976)))
start_dates <- mdy(c("03/20/2015","06/21/2015", "09/23/2015", "12/21/2015"))
end_dates <- mdy(c("03/19/2015", "06/20/2015", "09/22/2015", "12/20/2015", "12/31/2015"))
Season = c("Spring Equinox- 3/20", "Summer Solstice- 6/21", "Autumn Equinox- 9/23", "Winter Solstice- 12/21")
start_dates_gg <- mdy(c( "01/01/2015", "03/20/2015","06/21/2015", "09/30/2015"))
Season_gg = c("Winter Solstice- 12/21", "Spring Equinox- 3/20", "Summer Solstice- 6/21", "Autumn Equinox- 9/23")
mydata$datenum <- as.numeric(mydata$when)
model10 <- loess(temperature ~ datenum, data=mydata, span = 0.10)
mydata$smoothed10 <- predict(model10)
ggplot(data=mydata, aes(x=when)) +
geom_line(aes(y=smoothed10, col=seasons)) +
theme_bw() +
annotate(geom="text", x=start_dates_gg, y=c(10, 27, 75, 60), label=Season_gg, hjust=0, col = c("#C77Cff","#7CAE00","#00BFC4","#F8766D")) +
theme(legend.position="bottom") +
labs(title = "Weather and Seasons", x = "Date", y= "Temperature (F)")
Я получаю странный график, который выглядит примерно так. Почему по экрану проходит странная фиолетовая линия? Фиолетовая линия предназначена как раз для зимнего сезона.
2 ответа
Вам просто нужно добавить group = 1
к вызову geom_line()
, чтобы ggplot
знал, что все точки принадлежат друг другу и должны быть связаны одной линией.
ggplot(data = mydata, aes(x = when)) +
geom_line(aes(y = smoothed10, col = seasons, group = 1)) + # add group here
theme_bw() +
annotate(geom = "text", x = start_dates_gg, y = c(10, 27, 75, 60),
label = Season_gg, hjust = 0, col = c("#C77Cff", "#7CAE00", "#00BFC4", "#F8766D")) +
theme(legend.position = "bottom") +
labs(title = "Weather and Seasons", x = "Date", y = "Temperature (F)")
Создано 23 октября 2018 г. пакетом REPEX (v0.2.1.9000)
Если у вас есть только отображение colour
, по умолчанию ggplot
будет соединять все точки одного цвета. Вы можете остановить это, предоставив дополнительное сопоставление group
, которое указывает, какие точки должны быть подключены, например:
ggplot(data=mydata, aes(x=when)) +
geom_line(aes(y=smoothed10, col=seasons, group = lubridate::year(when))) +
theme_bw() +
annotate(geom="text", x=start_dates_gg, y=c(10, 27, 75, 60), label=Season_gg,
hjust=0, col = c("#C77Cff","#7CAE00","#00BFC4","#F8766D")) +
theme(legend.position="bottom") +
labs(title = "Weather and Seasons", x = "Date", y= "Temperature (F)")
Новые вопросы
r
R - это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, предоставьте минимальные и воспроизводимые примеры вместе с желаемым результатом. Используйте dput () для данных и укажите все небазовые пакеты с вызовами library (). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. По вопросам, связанным со статистикой, используйте https://stats.stackexchange.com.