我正在绘制50-100个实验的结果 . 每个实验都会产生一个时间序列 . 我可以绘制所有时间序列的意大利面条图,但我想要的是时间序列羽流的密度图 . (类似于此图中下方面板中的灰色阴影:http://www.ipcc.ch/graphics/ar4-wg1/jpg/fig-6-14.jpg)
我可以通过2d binning或binhex“做”这样做,但结果可能更漂亮(参见下面的示例) .
这是一个代码,用于再现模拟数据的羽流图(使用ggplot2和reshape2) .
# mock data: random walk plus a sinus curve.
# two envelopes for added contrast.
tt=10*sin(c(1:100)/(3*pi))
rr=apply(matrix(rnorm(5000),100,50),2,cumsum) +tt
rr2=apply(matrix(rnorm(5000),100,50),2,cumsum)/1.5 +tt
# stuff data into a dataframe and melt it.
df=data.frame(c(1:100),cbind(rr,rr2) )
names(df)=c("step",paste("ser",c(1:100),sep=""))
dfm=melt(df,id.vars = 1)
# ensemble average
ensemble_av=data.frame(step=df[,1],ensav=apply(df[,-1],1,mean))
ensemble_av$variable=as.factor("Mean")
ggplot(dfm,aes(step,value,group=variable))+
stat_binhex(alpha=0.2) + geom_line(alpha=0.2) +
geom_line(data=ensemble_av,aes(step,ensav,size=2))+
theme(legend.position="none")
有没有人知道一个很好的方法来获得带渐变的阴影信封 . 我也试过geom_ribbon,但没有给出任何沿羽流密度变化的迹象 . binhex做到了这一点,但没有美学上令人愉悦的结果 .
3 回答
计算分位数:
情节色带:
这是针对两个分位数间隔,(0-100)和(25-75) . 对于更多的分位数,你需要更多的args到
quantile
和更多的带状层,并且还需要调整颜色 .根据Spacedman的想法,我找到了一种以自动方式添加更多间隔的方法:我首先计算每个
step
的分位数,用成对的对称值对它们进行分组,然后按正确的顺序使用geom_ribbon
...谢谢Erwan和Spacedman .
避免'tidyr'('dplyr'和'magrittr')我的Erwans回答版本变为