我有一个旧实验的每小时温度数据。我想将数据集汇总成ggplot中的图表,显示每个实验处理的平均温度,以及每小时每个处理内温度的变化。我想有一个看起来像这样的非excel图:
数据链接在这里。 https://www.dropbox.com/sh/27cft3118dha6xt/46_xxZZano
我可能必须使用重塑来正确格式化数据。 JD指的是一年中的Julian日,Time指的是当天的小时。注意,标签A-H是治疗1,I-P是治疗2,Q-X是治疗3.任何关于如何最好地进行治疗的建议将非常感激。
非常感谢。
答案 0 :(得分:1)
也许是这样的:
df<-read.csv(file="2011_Temps_obs.csv")
require(reshape2)
require(ggplot2)
require(dplyr) # for aggregation
df$Hour<-as.character( # load "Hour" in correct format
strptime(
paste(df$Year,df$JD,substr(
formatC(df$Time, width = 4, format = "d", flag = "0"),
1,2),sep="-"),
format="%Y-%j-%H"
))
m<-melt(df,id.vars="Hour") # melt by hour
m<-m[!(m$variable %in% c("Year","JD","Time")),] # filter out un-needed columns
lookup<-data.frame(variable=unique(m$variable),test=c(rep(1,5),rep(2,8),rep(3,25)))
ggplot(merge(m,lookup,by="variable")) + # merge m to get the test rollup
geom_smooth(aes(x=Hour,y=value,group=as.factor(test),fill=as.factor(test),color=as.factor(test)))
这是带CI的平滑图
OR 使用dplyr预先计算您自己的摘要统计信息
summdata<-
merge(m,lookup,by="variable") %.%
group_by(Hour,test) %.%
summarise(mean=mean(value),min=min(value),max=max(value))
ggplot(summdata,aes(group=as.factor(test), color=as.factor(test), fill=as.factor(test))) +
geom_line(aes(x=Hour,y=mean),size=1,alpha=0.6) +
geom_ribbon(aes(x=Hour,ymin=min,ymax=max),alpha=0.1)