【问题标题】:How to make a timeseries boxplot in R如何在 R 中制作时间序列箱线图
【发布时间】:2014-04-18 19:58:48
【问题描述】:

我正在尝试使用ggplot2 制作时间序列箱线图。

我对许多人都有每月的价值观。

我需要用我的数据按月制作时间序列箱线图。

我认为我的问题是如何用我的数据创建一个因子(月份)。

p <- ggplot(mydata, aes(factor(date), measure))

【问题讨论】:

  • 据我所知,箱线图使用分类数据作为 x 轴。实际上,这会将日期变成标签而不是日期,从而将那里的信息剥离。我不确定是否有办法在 x 轴上正确绘制时间,以便保留时间的间距(节奏?)。
  • 制作这样的东西:![i.imgur.com/bM6Lyje.png]

标签: r ggplot2


【解决方案1】:

我创建了一个函数来创建你需要的情节。

功能是:

ts_plot_season <- function(x = x) {
season <- cycle(x)
season.factor <- factor(season)
ggplot() + 
  geom_boxplot(mapping = aes(x = season.factor,
                             y = x)) +
  labs(x = "Periodo", y =  "Serie")
}

狐狸示例:

 ts_plot_season(AirPassengers)

我希望这会有所帮助。我知道这个问题很老,但我在网上找不到一些上帝的答案。所以我认为这会对某人有所帮助。

【讨论】:

    【解决方案2】:

    另一种无需更改日期格式和进行任何排序等操作的方法是简单地将日期添加为分组因素,如下所示:

    ggplot(mydata) + geom_boxplot(aes(x = date, y = measure, group = date))

    【讨论】:

      【解决方案3】:

      更新:基于 OP 的说明,即必须分别处理多年。

      library(ggplot2)
      
      #generate dummy data
      date_range <- as.Date("2010/06/01") + 0:400
      measure <- runif(401)
      mydata <- data.frame(date_range, measure)
      
      # create new columns for the months and years, and 
      # and a year_month column for x-axis labels
      mydata$month <- format(date_range, format="%b")
      mydata$year <- as.POSIXlt(date_range)$year + 1900
      mydata$year_month <- paste(mydata$year, mydata$month)
      mydata$sort_order <- mydata$year *100 + as.POSIXlt(date_range)$mon
      
      #plot it
      ggplot(mydata) + geom_boxplot(aes(x=reorder(year_month, sort_order), y=measure))
      

      产生:

      希望这可以帮助您继续前进。

      【讨论】:

      • 感谢 Ram,它成功了。但是,它将所有不同的年份分组在同一月份。我的数据范围从 2010 年到 2011 年,所以我需要 2 个“一月、二月、三月……”。有什么想法吗?
      • 我已经更新了我的答案,因此每个“年月”都是单独绘制的,而不是分组的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      • 1970-01-01
      • 2020-12-01
      • 2014-12-17
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多