Удаление линий связи между отсутствующими датами в ggplot - PullRequest
1 голос
/ 03 июня 2019

Я хочу построить временной ряд с отсутствующими датами и значениями. Вот пример:

library(lubridate)
date_list = seq(ymd('1990-05-01'),ymd('2000-09-30'),by='day')
date_list = date_list[which(month(date_list) %in% c(5:9))]

value_list1 = sample(1:40, 1683, replace=TRUE)
value_list2 = sample(1:40, 1683, replace=TRUE)

testsample = data.frame(Date = date_list, Value1 = value_list1, Value2 = value_list2)

library(ggplot2)
ggplot(data = testsample, aes(x = Date)) +
  geom_line(aes(y = Value1), color = "black", size = 1, alpha=0.5) +
  geom_line(aes(y = Value2), color = "red", size = 1, alpha=0.5) +
  labs(subtitle="testplot", 
       x = "year", 
       y = "values") +
  scale_x_date(date_labels="%y",date_breaks  ="1 year")

У меня нет дат и данных с ноября по апрель.

Мой сюжет выглядит так:

enter image description here

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

1 Ответ

3 голосов
/ 03 июня 2019

Одним из решений было бы указать эстетику группы, соответствующую группам, которые вы хотите соединить линиями.

В вашем случае это год:

ggplot(data = testsample, aes(x = Date, group = year(Date))) +
  geom_line(aes(y = Value1), color = "black", size = 1, alpha=0.5) +
  geom_line(aes(y = Value2), color = "red", size = 1, alpha=0.5) +
  labs(subtitle="testplot", 
       x = "year", 
       y = "values") +
  scale_x_date(date_labels = "%y", date_breaks  ="1 year")

enter image description here

Опираясь на комментарий Грегорса, мы можем также изменить неявные пропущенные значения на явные пропущенные значения, например, используя tidyr::complete:

testsample2 <- tidyr::complete(testsample, Date = seq(min(Date), max(Date), by = "day"))
ggplot(data = testsample2, aes(x = Date)) +
  geom_line(aes(y = Value1), color = "black", size = 1, alpha=0.5) +
  geom_line(aes(y = Value2), color = "red", size = 1, alpha=0.5) +
  labs(subtitle="testplot", 
       x = "year", 
       y = "values") +
  scale_x_date(date_labels = "%y", date_breaks  ="1 year")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...