【问题标题】:Seasonal Temperature Boxplots in RR中的季节性温度箱线图
【发布时间】:2020-05-03 03:10:16
【问题描述】:

我目前正在进行一些变量探索,并为 3 个不同的气候参数(Tmin、Tmean、Tmax)生成了箱形图。我想知道如何将这些变量分组到一个具有类似结构的箱形图中:@ 987654321@ 我在网上看过一些教程,但它们都要求在数据框的行而不是列的头部分配分组参数。我尝试在 tmin 中添加 +tmax 作为参数,但这会产生错误。我用来生成我的代码如下:

tmin<-  ggplot(prism, aes(x = factor(season, levels=c("spring","summer","fall","winter")), 
                                  y = tmin_c)) +
                geom_boxplot(fill = fill, colour = line, alpha = 0.7) +
                theme_bw() +
                scale_y_continuous(name = "Temperature C") +
                scale_x_discrete(name = "Season") +
                ggtitle("MRL Temperature 1980-2013") +
                theme(plot.title = element_text(hjust = 0.5))
tmin

已解决,这是最终的工作输出以供将来参考:

#Temperature
dat <- prism
dat <- dat %>%
       select(1,2,4,5,6) #1year,2season,4tmin,5tmean,6tmax

dat <- reshape2::melt(dat, measure.vars=3:5)


ggplot(dat, aes(y = value, 
                x = factor(season, levels=c("spring","summer","fall","winter")), 
                fill=factor(variable))) +
            geom_boxplot() +
            theme_bw() +
            scale_y_continuous(name = "Temperature C") +
            scale_x_discrete(name = "Season") +
            ggtitle("MRL Temperature 1980-2013") +
            theme(plot.title = element_text(hjust = 0.5))

结果:

【问题讨论】:

  • 试试箱线图(prism$tmin_c~factor(prism$season, levels=c("Spring","Summer","Fall","Winter")), data=airquality, main=" MRL TMin 1980-2013", xlab="Season", ylab="Tmin (C)", col="firebrick2", border="brown" )
  • 谢谢!我添加了不正确的级别参数,这就是它不起作用的原因。关于为 tmean 和 tmax 添加额外的箱线图有什么建议吗?
  • @k3r0 这能回答你的问题吗:stackoverflow.com/a/47479817/6574038 ?
  • @jay.sf 有点,我接受了帖子中的建议并使用了 ggplot 方法,但我无法包括每个季节内的每个温度变化

标签: r temperature


【解决方案1】:

我使用airquality 数据引用您的code 的原始版本。

想象Month 是你的season 变量。首先,使用reshape2::melt将数据重新整形为长格式;你的measure.vars 将是t_min, t_max, ...

dat <- reshape2::melt(airquality, measure.vars=1:3)

summary(dat)
# Temp           Month            Day          variable       value       
# Min.   :56.00   Min.   :5.000   Min.   : 1.0   Ozone  :153   Min.   :  1.00  
# 1st Qu.:72.00   1st Qu.:6.000   1st Qu.: 8.0   Solar.R:153   1st Qu.: 10.30  
# Median :79.00   Median :7.000   Median :16.0   Wind   :153   Median : 24.00  
# Mean   :77.88   Mean   :6.993   Mean   :15.8                 Mean   : 80.86  
# 3rd Qu.:85.00   3rd Qu.:8.000   3rd Qu.:23.0                 3rd Qu.:136.00  
# Max.   :97.00   Max.   :9.000   Max.   :31.0                 Max.   :334.00  
#                                                              NA's   :44 

其次,使用boxplot: 作为Month(即您的season)因素。

at.key <- c(1:3, 5:7, 9:11, 13:15, 17:19)
# at.key <- (1:(5*4))[(1:(5*4)) %% ((5*4)/4-1) != 0]  ## alternatively

b <- boxplot(value ~ variable:Month, border=2:4, col="white",
             data=dat, at=at.key, xaxt="n",
             main="MRL TMin 1980-2013",
             xlab="Season",
             ylab="Tmin (C)")

mtext(b$names, 1, .5, at=at.key, cex=.8, las=2)

【讨论】:

  • 做到了,我不理解其他来源的 reshape2::melt 步骤,感谢您澄清!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-12
  • 2020-06-27
  • 2021-12-20
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
相关资源
最近更新 更多