【问题标题】:Temperature variation plot in ggplotggplot中的温度变化图
【发布时间】:2014-03-17 10:55:25
【问题描述】:

我有一个旧实验的每小时温度数据。我想将数据集总结为 ggplot 中的图表,显示每个实验处理的平均温度,以及每个处理每小时的温度变化。我想要一个看起来像这样的非 excel 图表:

数据链接在这里。 https://www.dropbox.com/sh/27cft3118dha6xt/46_xxZZano

我可能必须使用 reshape 来正确格式化数据。 JD 是指一年中的儒略日,Time 是当天的小时。请注意,标签 A-H 是治疗 1,I-P 是治疗 2,Q-X 是治疗 3。任何关于如何最好地解决这个问题的建议将不胜感激。

非常感谢。

【问题讨论】:

  • 看来@Troy 为你制作了整个东西。我将建议从dat$ts <- strptime(sprintf("%4d%2d%04d",dat$Year, dat$JD, dat$Time), format="%Y%j%H%M") 开始获取时间戳,然后让您开始将治疗作为正常的时间序列数据,看看您是否可以在继续之前自己尝试melt(),但是,您'有完整的解决方案。
  • @I Del Toro 数据从 Dropbox 中删除了吗?
  • 现在没了,抱歉
  • @I Del Toro 您能否编辑问题并删除与问题无关的数据链接?

标签: r ggplot2 summary temperature


【解决方案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 的平滑图

使用 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    相关资源
    最近更新 更多