ggplot с несколькими строками (развитие со временем) - PullRequest
1 голос
/ 11 марта 2020

Я хотел бы создать ggplot с несколькими строками. Однако вывод не выглядит, как я хочу. Похоже, точки отмечены вертикально. Однако я хочу связать значения каждого периода, который я вижу с течением времени (больше похоже на горизонтальность).

У меня есть набор данных с датой (в основном ежемесячно, но не всегда), столбцом, который я хочу отображать в виде разных строк (5 строк 0-4) с именем "color", и значениями. Это выглядит так:

 head(df)
        date color     value
1 2007-01-01     0 0.5071167
2 2007-02-01     0 0.5071167
3 2007-03-01     0 0.5071167
4 2007-04-01     0 0.5071167
5 2007-05-01     0 0.7292619
6 2007-06-01     0 0.5071167

Я пытался создать ggplot:

ggplot(df, aes(x= date, y = value, color = color)) + geom_line()

the following plot was created

однако я бы предпочел сюжет, который показывает одну четкую линию за цвет (составляет 5 линий), так что можно увидеть, как он развивается со временем. больше похоже на это, но с 5 строками: how the plot should look like

Я был бы рад, что кто-то может помочь:)

1 Ответ

1 голос
/ 11 марта 2020

Ваш график выглядит таким образом, потому что столбец color является цифрой c, поэтому ggplot обрабатывает его как непрерывную переменную. Это означает, что ggplot считает, что вы хотите, чтобы все наблюдения были в одной группе. Когда он видит 5 разных переменных с одинаковым date, он отображает вертикальную линию, соединяющую их aws, что явно не то, что вам нужно. Вы должны сообщить ggplot, что вы намерены color быть категориальной переменной, а не непрерывной переменной.

Если вы конвертируете color в фактор, график будет разделять Наблюдайте за пятью группами в соответствии с цветом и начертите их так, как вы хотите. Вы можете либо преобразовать число в кадре данных, либо сделать это непосредственно в эстетике c:

ggplot(df, aes(x= date, y = value, color = as.factor(color))) + 
  geom_line() + 
  labs(colour = "color")

Вы получите это: enter image description here


Используемые данные

set.seed(69)
df <- data.frame(date = rep(as.POSIXct("2007-01-01") + lubridate::days(1:3650), 5),
                 color = rep(0:4, each = 3650),
                 value = c(cumsum(rnorm(3650)), cumsum(rnorm(3650)),  cumsum(rnorm(3650)),
                           cumsum(rnorm(3650)), cumsum(rnorm(3650))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...