Plotting two variables as lines using ggplot2 on the same graph

后端 未结 5 2295
不思量自难忘°
不思量自难忘° 2020-11-21 05:41

A very newbish question, but say I have data like this:

test_data <-
  data.frame(
    var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
    var1 = 150 + c(0         


        
5条回答
  •  佛祖请我去吃肉
    2020-11-21 06:09

    You need the data to be in "tall" format instead of "wide" for ggplot2. "wide" means having an observation per row with each variable as a different column (like you have now). You need to convert it to a "tall" format where you have a column that tells you the name of the variable and another column that tells you the value of the variable. The process of passing from wide to tall is usually called "melting". You can use tidyr::gather to melt your data frame:

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

    Just to be clear the data that ggplot is consuming after piping it via gather looks like this:

    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
    

提交回复
热议问题