【问题标题】:How do I add x category means to a plot?如何将 x 类别均值添加到绘图中?
【发布时间】:2020-11-22 20:38:49
【问题描述】:

我正在 R 中按月和年创建降雨均值图。 下图是我使用这些列创建的: Year, Numbered_Months, Rainfall(mm/month)

我现在要做的是添加另一行,显示多年来每个月的平均值。有没有办法根据我已经绘制的内容使用 ggplot 来做到这一点,而不是在数据框中创建一个新列并将其添加为另一个“年份”类别?

【问题讨论】:

标签: r plot time-series mean


【解决方案1】:

我们可以使用以下数据和绘图代码很好地重新创建您的绘图(最好将其包含在您的问题中)

df <- data.frame(Year = rep(2017:2019, each = 12),
                 Numbered_Months = rep(1:12, 3),
                 `Rainfall(mm/month)` = c(0.2, 0.25, 2.5, 4.9, 2.1, 1.2, 0.6, 
                                          0.3, 0.4, 0.6, 0.65, 0.75, 0.25, 0.15, 
                                          0.35, 0.55, 0.6, 0.8, 0.6, 0.55, 0.5, 
                                          3.4, 2.9, 2.1, 0.45, 0.4, 0.25, 0.8, 
                                          1.4, 0.15, 0.8, 0.85, 0.65, 1.4, 2.3, 
                                          0.3))

library(ggplot2)

original <- ggplot(df, aes(Numbered_Months, Rainfall.mm.month.)) +
  geom_line(aes(colour = factor(Year))) +
  scale_color_manual(values = c("red", "darkblue", "forestgreen")) +
  scale_y_continuous(breaks = 1:5) +
  scale_x_continuous(breaks = 1:12) +
  theme(axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        axis.text.x = element_text(angle = 90),
        panel.grid.minor = element_blank(),
        axis.title.y = element_blank(),
        legend.position = "none")

original

我们可以使用stat_summary 函数,或者只是计算出我们想要绘制的内容并将该数据传递给ggplot。在这个例子中,我创建了一个小汇总数据框来添加每月平均值和标准误差:

library(dplyr)

group_means <- df %>% 
  group_by(Numbered_Months) %>% 
  summarize(mean = mean(Rainfall.mm.month.), 
            sem_low = mean- sd(Rainfall.mm.month.)/sqrt(3), 
            sem_high = mean + sd(Rainfall.mm.month.)/sqrt(3))
#> `summarise()` ungrouping output (override with `.groups` argument)

original +   
  geom_ribbon(data = group_means, 
              aes(y = mean, ymin = sem_low, ymax = sem_high),
              alpha = 0.1) +
  geom_line(data = group_means, aes(y = mean), linetype = 2, size = 1) 

reprex package (v0.3.0) 于 2020 年 8 月 2 日创建

【讨论】:

    【解决方案2】:

    你可以试试这个:

    library(data.table)
    library(ggplot2)
    
    dt_a = data.table(year=c(2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019),
                    month=c(1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12),
                    value=runif(24, 10, 30))
    
    ggplot(
      data=dt_a, aes(x=month, y=value)
    ) + geom_line(
      aes(color=factor(year))
    ) + stat_summary(
      fun = mean, geom="line"
    )
    

    【讨论】:

      猜你喜欢
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 2016-09-28
      • 1970-01-01
      • 2015-01-13
      相关资源
      最近更新 更多