2014-04-05 43 views
0

我的数据是这样的如何绘制多个时间序列

Date,  VID, C1, C2, C3 
2/1/2014, V01, ON, OFF, OFF 
2/2/2014, V01, ON, OFF, OFF 
2/3/2014, V01, ON, OFF, OFF 
2/4/2014, V01, ON, OFF, OFF 
2/1/2014, V02, OFF, ON, OFF 
2/3/2014, V02, OFF, OFF, ON 
2/4/2014, V02, ON, ON, OFF 
2/5/2014, V02, ON, OFF, ON 

有很多VID的和C1,C2,C3的范畴。 这是我如何绘制这&这是非常耗时的,所以想知道我是否可以绘制所有时间序列为一个VID ​​ib一个图表,以及对于所有VID如何做?

library(sqldf) 
library(zoo) 

#I execute this code for each variable and get separate plot 
#I would like to plot all C1,C2,C3 for each vehicle in single plot 
#and plot for each vehicle 
vehicle_V01 = sqldf("select * from df where Vehicle='V01'") 
vehicle_V01$C1_numeric = as.numeric(vehicle_V01$C1) 
vehicle_V01$C2_numeric = as.numeric(vehicle_V01$C2) 
vehicle_V01$C3_numeric = as.numeric(vehicle_V01$C3) 
ts = zoo(vehicle_V01$C1_numeric ,vehicle_V01$Date) 
plot(ts) 

这是非常耗费时间,任何想法如何有效地做到这一点?

+0

如果Cs只是ON和OFF,它不是一个真正的时间序列,是吗?他们可以采用的唯一数字值将是1和2. –

+0

您可以使用二进制数据获得时间序列。它们不能单独使用传统的时间序列分析技术进行分析,但它是一种有效的时间序列类型。看到这里的问题的摘要: http://link.springer.com/chapter/10.1007%2F0-306-48102-2_9 –

回答

0

我会用ggplot2reshape2来绘制和整形数据。

library(reshape2) 
library(ggplot2) 
df=melt(df,id.vars=c('Date','VID')) 
df$value=as.numeric(vehicle$value)#ON = 2, OFF = 1 

ggplot(df,aes(x=Date,y=value))+geom_line()+facet_grid('variable+VID~.') 

最后3行上的日期值已更改为少一个,但输出图形看起来像您在下面看到的内容。这是你在找什么? (另外,我没有使用您使用的日期值,但是您可以在运行代码时使用它们,或者将轴标签更改为它们)。

enter image description here

+0

谢谢!!,这是我想要的,除了我想组所有车辆(V01)一起然后V02等等,而不是C(n)。任何想法如何可以做到? – user3056186

+0

你是如何看待C(n)的?由于有三个不同的变量(在你的情况),你需要一次做一个(通过对数据进行子集化(例如'df1 = df [,df $ variable =='C1']'),如果你你也可以做'ggplot(df,aes(x = Date,y = value,group = variable))+ geom_line()+ facet_grid('VID〜。')',但是你不能区分图形的不同值,你可以添加一个'color = variable'或'linetype = variable',但是如果你这样做的话,仍然会有重叠问题。 –