我的情况很安静,如this问题,我怎么需要在一个面板中绘制多个时间序列(或固定长度向量)。 (我想上传一张图片,但它说我没有足够的声誉......)
这是我的示例代码。
列“id”标识用户。 (示例代码只有1个用户)
列“时间”刻度从1到24 * 7小时(每小时总结1周)
列“A”,“B”,“C”是每小时属性摘要
> require(data.table)
# Create some data
> dt<-data.table(id=rep(123,168),time=1:168,A=rnorm(168,10,5),B=rnorm(168,100,20),C=rnorm(168,10,5))
> dt
id time A B C
1: 123 1 2.435577 147.01446 12.484723
2: 123 2 15.119403 88.05115 7.226495
3: 123 3 17.835930 110.01482 6.888222
4: 123 4 10.455834 102.48860 13.098892
5: 123 5 8.107672 83.70896 7.711350
---
164: 123 164 8.301877 145.88020 10.195002
165: 123 165 12.403081 97.90534 14.249087
166: 123 166 16.563673 125.69398 11.039720
167: 123 167 11.091746 98.81823 15.131038
168: 123 168 10.190338 87.32466 11.422943
> z<-zoo(dt)
> plot(z[,3:5],yax.flip=TRUE,col=1:3) #plot all attributes timeseries in one panel
我想添加网格并自定义x轴,如下所示:
周一,1,2,3,...,23,周二,1,2,3,...,23,周三,1,2,3,...,23,周四,1,2,3,...,23日,周五,1,2,3,...,23,Sat.1,2,3,...,23,阳光,1,2,3 ,...,23
我尝试使用axis
,abline
和grid
来获取我想要的内容,但它根本不起作用。(如果plot.type=single
可以正常工作)
答案 0 :(得分:1)
您必须使用panel
中的plot.zoo
选项。这允许您将网格添加到所有面板。您还可以将底部轴添加到绘图中的最后一个面板。我没有把每小时的数字都放在一起,因为它太拥挤了。
ax.date <-as.POSIXlt("2013-01-06")+(0:167)*3600 #Dummy date for POSIXlt method
my.panel <- function(x, y, ..., pf = parent.frame()) {
grid(NA,NULL)
abline(v=seq(1,168,24),col = "lightgray", lty = "dotted", lwd = par("lwd"))
lines(x, y, ...)
#if bottom panel
if (with(pf, length(panel.number) == 0 ||
panel.number %% nr == 0 || panel.number == nser)) {
# create ticks at x values and then label every 24th tick
axis(side = 1, at = x, labels = FALSE, tcl=-0.3) #hour ticks
axis(side = 1, at = seq(1,168,6), labels = FALSE) #6hour ticks ticks
axis(1,at=seq(1,168,24), labels=format(ax.date[seq(1,168,24)],"%a")) #day of the week
axis(1,at=seq(13,168,24),labels=format(ax.date[seq(13,168,24)],"%H"), cex.axis=0.7) #noon ticks
}
}
plot(z[,3:5], panel = my.panel,yax.flip=TRUE,col=1:3,xaxt="n")