在同一个图上使用ggplot2将两个变量绘制为线
一个非常新鲜的问题,但说我有这样的数据:
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)
)
如何使用ggplot2
在同一图表上绘制时间序列var0
和var1
,并在x轴上绘制date
? 如果您制作var0
和var1
不同的颜色,并且可以包含图例,则var0
奖励积分!
我确信这很简单,但我找不到任何例子。
对于少数变量,您可以使用自己手动构建图表:
ggplot(test_data, aes(date)) +
geom_line(aes(y = var0, colour = "var0")) +
geom_line(aes(y = var1, colour = "var1"))
的一般方法是将数据(利用转换为长格式melt()
从包reshape
或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()
您需要将数据设置为“高”格式,而不是“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()
只需要清楚ggplot
在通过gather
管道后消耗的data
如下所示:
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
链接地址: http://www.djcxy.com/p/25023.html
上一篇: Plotting two variables as lines using ggplot2 on the same graph