Мой код ниже. Он должен повториться. Это код для загрузки данных, обработки данных, построения линии лёсса и последующего добавления графика.

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)")

Я получаю странный график, который выглядит примерно так. Почему по экрану проходит странная фиолетовая линия? Фиолетовая линия предназначена как раз для зимнего сезона. введите описание изображения здесь

1
Blake Shurtz 24 Окт 2018 в 09:00

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)

2
Tung 24 Окт 2018 в 06:10

Если у вас есть только отображение 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)")
0
Marius 24 Окт 2018 в 06:08
52961934