R脚本,ggplot2和qplot,同一图表上的多个时间序列线图

时间:2012-02-03 15:22:47

标签: r

我希望在同一个地块上有多个“线”。多个数据点。

在我的示例中,我如何包含'xa'和'xb'数据点。

这就是我只有一组数据点,但我想要两个。如何修改此脚本。

library(ggplot2)

da <- c("2012-02-02 09:01:00", "2012-02-02 09:02:00", "2012-02-02 09:03:00")
db <- c(0.4, 0.6, 0.5)

xa <- c("2012-02-02 09:01:00", "2012-02-02 09:02:00", "2012-02-02 09:03:00")
xb <- c(0.3, 0.43, 0.7)

da2 <- as.POSIXct(da)
dfx <- data.frame(da2, db)

summary(dfx)

png('time_data_errs6b.png', width=640, height=480)
gg <- qplot(da2, db, colour='red')+
    opts(title = 'Requests App')+xlab('Time')+ylab('Requests') +
    geom_line()

print(gg)
dev.off()

2 个答案:

答案 0 :(得分:5)

我会按时间变量制作两个data.framesmerge

> df.a<-data.frame(time=da, value.a=db)
> df.b<-data.frame(time=xa, value.b=xb)
> df.mix<-merge(df.a, df.b, by='time')

> df.mix
                 time value.a value.b
1 2012-02-02 09:01:00     0.4    0.30
2 2012-02-02 09:02:00     0.6    0.43
3 2012-02-02 09:03:00     0.5    0.70

像你一样转换为POSIXct然后将其融合为长格式。

> df.mix$time<-as.POSIXct(df.mix$time)
> df.melt<-melt(df.mix, id.vars='time')

ggplot可以很好地处理长格式数据,因此通常我的目标是在绘制之前使用meltmerge将数据放入合适的结构中。

> ggplot(df.melt, aes(x=time, y=value, colour=variable)) + geom_path()

我还希望使用基础ggplot而不是qplot来表示我自己的可读性。但那是一个偏好的问题。

答案 1 :(得分:2)

这是一种更简单的方法,无需mergemelt数据。

df_a <- data.frame(time = da, value = db)
df_b <- data.frame(time = xa, value = xb)
ggplot(df_a, aes(x = as.POSIXct(time), y = value)) +
  geom_line(col = 'red') + 
  geom_line(col = 'blue', data = df_b)