r - установить - Построение двух переменных в виде строк с использованием ggplot2 на одном графике




красивые графики в r (3)

Очень новичок, но скажу, что у меня есть такие данные:

test_data <-
  data.frame(
    var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
    var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
    date = seq(as.Date("2002-01-01"), by="1 month", length.out=100)
  )

Как я могу построить как временные ряды var0 и var1 на одном и том же графике с date на оси x, используя ggplot2 ? Бонусные очки, если вы делаете var0 и var1 разными цветами и можете включать легенду!

Я уверен, что это очень просто, но я не могу найти никаких примеров.


Вам нужно, чтобы данные были в «высоком» формате вместо «wide» для ggplot2. «широкий» означает наличие наблюдения за строку с каждой переменной в виде другого столбца (как и у вас сейчас). Вам нужно преобразовать его в «высокий» формат, где у вас есть столбец, который сообщает вам имя переменной и другой столбец, в котором указывается значение переменной. Процесс перехода от широкого к высокому обычно называют «плавлением». Вы можете использовать tidyr::gather чтобы расплавить ваш фрейм данных:

library(ggplot2)
library(tidyr)

test_data <-
  data.frame(
    var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
    var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
    date = seq(as.Date("2002-01-01"), by="1 month", length.out=100)
  )
test_data %>%
    gather(key,value, var0, var1) %>%
    ggplot(aes(x=date, y=value, colour=key)) +
    geom_line()

Чтобы просто очистить data которые ggplot потребляет после того, как их конвейер через ggplot выглядит следующим образом:

date        key     value
2002-01-01  var0    100.00000
2002-02-01  var0    115.16388 
...
2007-11-01  var1    114.86302
2007-12-01  var1    119.30996

Для небольшого числа переменных вы можете сами создать сборку вручную:

ggplot(test_data, aes(date)) + 
  geom_line(aes(y = var0, colour = "var0")) + 
  geom_line(aes(y = var1, colour = "var1"))

Общий подход заключается в преобразовании данных в длинный формат (с использованием melt() из пакета reshape2 или reshape2 ) или gather() из пакета tidyr :

library("reshape2")
library("ggplot2")

test_data_long <- melt(test_data, id="date")  # convert to long format

ggplot(data=test_data_long,
       aes(x=date, y=value, colour=variable)) +
       geom_line()







r-faq