很高兴见到这里的Debian老朋友:)你的答案已经相当不错了.由于我碰巧在时间序列中工作很多,我以为我会使用优秀的
zoo和
xts套件投入一个变体.后者建立在前者之上,除了其他功能之外,还有我们可以在这里使用的period.apply()函数以及endpoints()函数来获得两小时的聚合.
所以在顶部,我会使用
library(zoo) # for zoo objects
library(xts) # for period.apply
gcdata
header=TRUE, sep=",", dec=".")
timestamps
as.POSIXct(strptime("2012-01-01 00:00:00",
format="%Y-%m-%d %H:%M:%S"))
gcdatazoo
创建一个动物园对象.你的功能仍然是:
plotAreaCorridor
x.pol
y.pol
plot(x, y[,6]+1, type="n", ...)
polygon(x.pol, y.pol, col=col.poly1, lty=0)
x.pol
y.pol
polygon(x.pol, y.pol, col=col.poly2, lty=0)
lines(x, y[,3], col="blue") # median
lines(x, y[,6], col="red") # max
invisible(NULL)
}
然后我们可以简化一点:
agg
INDEX=endpoints(gcdatazoo, "hours", k=2), # every 2 hours
FUN=function(x) quantile(x, # what fun.
probs=c(5,20,50,80,95,100)/100))
#v99 = q99(gcdata$Pause.s.) # what is q99 ?
v99
plotAreaCorridor(index(agg), # use time index as x axis
coredata(agg), # and matrix part of zoo object as data
ylim=c(0,max(agg[,5])*1.5),
ylab="Quantiles of GC events",
main="NewPar Collection Activity")
abline(h=median(gcdatazoo[,"Pause.s."]), col="lightblue")
abline(h=v99, col="grey")
labeltxt
text(x=index(agg)[20], y=1.5*v99, labeltxt, col="grey", pos=3) # or legend()
这使
轴现在是自动的,只显示工作日,因为跨度小于一周;这可以根据需要覆盖.