2012-02-03 182 views
2

我想在同一图上有多个“线”。多个数据点。R脚本,ggplot2和qplot,同一图上的多个时间序列线图

在我的例子中,如何包含'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() 
+0

观察结果:'gg < - qplot(...)'语句现在(2015年6月; R版本3.1.1)生成'错误:使用'主题'。 (Defunct;最后在版本0.9.1中使用)'。错误指的是使用'opts(title ='Requests App')'。看起来,直接替换'opts'(在这个上下文中)是'labs(title ='Requests App')',可以选择修改主题,如theme(plot.title = element_text(size = rel(2) ,color =“blue”))'。 – 2015-06-19 22:23:45

回答

5

我想提出两个data.frames和时间变量merge他们。

> 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。但那是一个偏好问题。

+0

不错,有效。 – 2012-02-03 15:52:38

+0

这非常有帮助。一个问题:你能否解释你对使用ggplot而不是qplot的评论? – amh 2012-04-19 00:28:02

+0

当我构建一个复杂的情节时,我喜欢使用'ggplot'来建立所有几何体和单个几何体共有的变量来分配它们的细节。 'ggplot(df,aes(x = time,y = value))+ geom_line(aes(color = some_category))+ geom_point(aes(size = some_other_category))'有帮助吗?如果没有,请随时提出您自己的问题,然后我会加入。 – Justin 2012-04-19 01:24:47

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) 
+1

我觉得这种方法更复杂。它需要两个独立的geom,如果你需要一个图例或者需要两个以上的着色变量,它会显得更加复杂。 – Justin 2012-02-03 17:15:36

+0

对于这篇文章中的问题,我认为这是一个真正的“合并”,然后是“熔化”数据的完整解决方案,当你可以使用更少的操作和代码行时。对于更普遍的问题,是的,效率增益可能会得到回报。 – Ramnath 2012-02-03 17:37:28

+0

确实如此,但难以弥补一个可教时刻! – Justin 2012-02-03 17:38:10

相关问题