绘制代表剩余配额数量的移动平均线样式线(R图绘制)

绘制代表剩余配额数量的移动平均线样式线(R图绘制),r,data-visualization,ggplot2,R,Data Visualization,Ggplot2,第二次编辑我现在意识到我修改后的代码已经很接近了,但还不是很接近;它应该只合理地计算我有数据的剩余日平均值,在月底之前不会持续增加(即,它应该在20日之后保持水平) 编辑:我现在已经找到了如何包含“每日平均剩余量”(在谷歌搜索了很多次之后,我找到了“内”)。我只是在努力划清界限。新代码: library("ggplot2") library("sitools") Host=c("red", "blue", "green") finish=as.Date("2015-04-30") start=

第二次编辑我现在意识到我修改后的代码已经很接近了,但还不是很接近;它应该只合理地计算我有数据的剩余日平均值,在月底之前不会持续增加(即,它应该在20日之后保持水平)

编辑:我现在已经找到了如何包含“每日平均剩余量”(在谷歌搜索了很多次之后,我找到了“内”)。我只是在努力划清界限。新代码:

library("ggplot2")
library("sitools")

Host=c("red", "blue", "green")
finish=as.Date("2015-04-30")
start=as.Date("2015-04-01")
Date=rep(seq(start, finish, "days"), each=3)
Bytes=c(sample(1e7:2e8, 60), rep(0, 30))
download = data.frame(Bytes, Date, Host)
download=within(download, days_remain <- as.numeric((finish - Date), units="days"))
download=within(download, avg_remain <- ((8e9 - cumsum(Bytes))/days_remain))
ggplot(download, aes(x = Date, y = Bytes, fill = Host)) + plot(download$Date, download$avg_remain) + geom_area() + scale_fill_brewer(palette="Paired") +  scale_y_continuous("download", labels=f2si)
理想情况下,这条黑线应该根据我们是否超过或低于“每日平均限额”而改变,这样就可以很容易地看出我们每天还剩下多少配额

我尝试创建一个for()循环,计算总的累计使用量,然后从总配额(8 GiBytes)中减去它,但我不知道如何将该向量(?)放回ggplot,并将其绘制为同一图形上的一条神奇的黑线


有没有办法在图表上画出“每日限额”这条线?

我在这里做的是为平均值制作一个完全独立的数据框,然后将其添加到绘图中

library("ggplot2")

Host=c("red", "blue", "green")
Date=rep(seq(as.Date("2015-04-01"), as.Date("2015-04-30"), "days"), each=3)
Bytes=c(sample(1e7:5e7, 60), rep(0, 30))
download = data.frame(Bytes, Date, Host)

#note this is slightly different than original
p <- ggplot(download, aes(x = Date, y = Bytes)) + geom_hline(yintercept=285000000) + geom_area(aes(fill=Host)) + scale_fill_brewer(palette="Paired") + 
            scale_y_continuous("download")

tot <- aggregate(x=download$Bytes,by=list(as.factor(download$Date)),FUN=sum)
tot$leftover <- 285000000 - tot$x
tot$Date <- as.Date(tot$Group.1)

p2 <- p + geom_line(data=tot, aes(x = Date, y = leftover), color = "black")
p2
库(“ggplot2”)
主机=c(“红色”、“蓝色”、“绿色”)
日期=代表(序号(截止日期(“2015-04-01”)、截止日期(“2015-04-30”)、“天”),各=3)
字节=c(样本(1e7:5e7,60),代表(0,30))
下载=data.frame(字节、日期、主机)
#请注意,这与原始版本略有不同

p@Andy-w谢谢。我想你有点误解了我的意思,但那可能是我拙劣的解释。你的代码让我得到了我想要的,主要是因为你的代码有效

library("ggplot2")

Host=c("red", "blue", "green")
finish=as.Date("2015-04-30")
start=as.Date("2015-04-01")
Date=rep(seq(start, finish, "days"), each=3)
Bytes=c(sample(1e7:2e8, 60), rep(0, 30))
download = data.frame(Bytes, Date, Host)
avg_remain=aggregate(Bytes ~ Date, download, sum)
avg_remain=within(avg_remain,  days_remain <- as.numeric((finish - Date), units="days"))
avg_remain=within(avg_remain, per_day <- (8e9 - cumsum(Bytes))/days_remain)

p = ggplot(download, aes(x = Date, y = Bytes)) + geom_area(aes(fill=Host)) + 
    scale_fill_brewer(palette="Paired") +  scale_y_continuous("download")
p2 = p + geom_line(data=avg_remain, aes(x=Date, y = per_day))
库(“ggplot2”)
主机=c(“红色”、“蓝色”、“绿色”)
完工=截止日期(“2015-04-30”)
开始=截止日期(“2015-04-01”)
日期=代表(顺序(开始、结束,“天”),每个=3)
字节=c(样本(1e7:2e8,60),代表(0,30))
下载=data.frame(字节、日期、主机)
平均剩余=聚合(字节数~日期、下载、总和)

avg_remaine=in(avg_remaine,days_remain,您可以使用图像。我稍微更新了代码(无需使用
sitools
库)。@andy-w再次感谢;sitools库的原因是将数字显示为例如千字节/兆字节,而不是科学符号。
library("ggplot2")

Host=c("red", "blue", "green")
finish=as.Date("2015-04-30")
start=as.Date("2015-04-01")
Date=rep(seq(start, finish, "days"), each=3)
Bytes=c(sample(1e7:2e8, 60), rep(0, 30))
download = data.frame(Bytes, Date, Host)
avg_remain=aggregate(Bytes ~ Date, download, sum)
avg_remain=within(avg_remain,  days_remain <- as.numeric((finish - Date), units="days"))
avg_remain=within(avg_remain, per_day <- (8e9 - cumsum(Bytes))/days_remain)

p = ggplot(download, aes(x = Date, y = Bytes)) + geom_area(aes(fill=Host)) + 
    scale_fill_brewer(palette="Paired") +  scale_y_continuous("download")
p2 = p + geom_line(data=avg_remain, aes(x=Date, y = per_day))