Проблема с ggplot с дискретной осью X в формате даты (гггг-мм-дд) - PullRequest
0 голосов
/ 29 августа 2018

У меня есть фрейм данных, как показано ниже. Мне нужно нарисовать линейный график, используя ggplot каждую строку, отображаемую для каждого года (то есть 2014, 2015 и т. Д.) Разными цветами для каждого года.

Я не могу соединить точки линией с моим кодом, показанным ниже. Но он отображает точки только разными цветами для каждого года. Это может быть простой вещью, но я просто не могу понять это.

library(reshape2)
library(ggplot2)

plot.data <- melt(Table_1, id.vars = 'Day Obs')
ggplot(plot.data, aes(x = `Day Obs`, y = value)) +
  geom_line(mapping = aes(x = `Day Obs`, y = value, colour = variable),size=1.0) +
  geom_point(mapping = aes(x = `Day Obs`, y = value, colour = variable),size=2.3)

Table_1:

Day Obs     2014    2015   2016   2017    2018
2018-08-01    NA     NA     NA     NA    1.002    
2018-08-03    NA     0.85   NA     NA       NA
2018-08-06    NA     NA     NA     NA      0.9
2018-08-07    NA     NA    0.78   0.88      NA
.
.

1 Ответ

0 голосов
/ 29 августа 2018

Проблема в том, что у вас отсутствуют значения i между наблюдениями и geom_line, тогда точки не соединяются (так как информация отсутствует). Это можно увидеть за 2018 год:

library(reshape2)
library(ggplot2)

plot.data <- melt(Table_1, id.vars = 'Day Obs')
plot.data[plot.data$variable == 2018, ]
#       Day Obs variable value
# 17 2018-08-01     2018 1.002
# 18 2018-08-03     2018    NA
# 19 2018-08-06     2018 0.900
# 20 2018-08-07     2018    NA

Здесь информация за 2018-08-03 явно отсутствует. Поэтому между точками нет связи, если мы их строим.

ggplot(plot.data, aes(x = `Day Obs`, y = value, colour = variable)) +
  geom_line(size = 1.0) +
  geom_point(size = 2.3)

enter image description here

Вы можете удалить явные пропущенные значения, и это работает:

ggplot(plot.data[!is.na(plot.data$value), ], 
       aes(x = `Day Obs`, y = value, colour = variable)) +
  geom_line(size = 1.0) +
  geom_point(size = 2.3)

enter image description here

Данные

Table_1 <- structure(list(`Day Obs` = structure(c(17744, 17746, 17749, 17750), class = "Date"), 
                          `2014` = c(NA, NA, NA, NA), 
                          `2015` = c(NA, 0.85, NA, NA), 
                          `2016` = c(NA, NA, NA, 0.78), 
                          `2017` = c(NA, NA, NA, 0.88), 
                          `2018` = c(1.002, NA, 0.9, NA)), 
                     row.names = c(NA, -4L), class = "data.frame")
...