【问题标题】:ggplot2: plotting time series data by month & weekggplot2:按月和周绘制时间序列数据
【发布时间】:2013-10-07 13:44:34
【问题描述】:

我正在尝试按周和月绘制时间序列数据;理想情况下,我想,我想使用箱线图来可视化按周分类的每日数据。虽然我可以使用 scale_x_date 更改 x 轴上的标签和网格线,但这不会影响图中的点。

这是问题的演示和我当前(笨拙的)解决方案。

library(zoo)
library(ggplot2)

d = as.Date(c(as.Date("2007-06-01"):as.Date("2008-05-31"))) # using zoo to reformat numeric 
x = runif(366, min = 0, max = 100)
df = data.frame(d,x)

# PROBLEM #    
p = ggplot(df, aes(d, x))
p + geom_point()
p + geom_boxplot() # more or less useless

# CURRENT FIX #
df$Year.Month <- format(df$d, "%Y-%m")
p = ggplot(df, aes(Year.Month, x))
p + geom_point(alpha = 0.75)
p + geom_boxplot() # where I'm trying to get to...

我确信在ggplot 中有一种更优雅的方法可以做到这一点。我说的对吗?

@shadow 下面的回答要简洁得多。但是有没有办法使用分箱来做到这一点?也许以某种形式使用stats

【问题讨论】:

  • 你可以在ggplot:p+geom_boxplot(aes(x=format(d, "%Y-%m")))做同样的事情
  • 谢谢@shadow - 那更整洁了。
  • 或者可能是影子代码的这种变化:p + geom_boxplot(aes(format(as.yearmon(d))))
  • 这很有趣——显然as.yearmon 没有按时间顺序返回该系列(我想知道为什么?)而且,它并不能完全让我读完每周一期——尽管我可能使用lubridate 来实现同样的事情,也许?

标签: r ggplot2


【解决方案1】:

您可以将日期视为 R 中的日期,并在 ggplot 中使用 scale_x_date() 来获取所需的 x-labels。

  • 另外,我发现创建一个名为“Month”的新变量因子来按月对箱线图进行分组更容易。在这种情况下,我使用 lubridate 来完成任务。

  • 如果您不想麻烦地创建一个新变量“Month”,您的 bloxplot 将在该月的 15 日绘制,这会使 viz 的阅读变得更加困难。

    library(magrittr)
    library(lubridate)
    library(dplyr)
    
    df %>%
      mutate(Date2 = as.Date(paste0("2000-", month(d), "-", "01"))) %>%
      mutate(Month = lubridate::month(d)) %>%
    
    ggplot(aes(Date2, x, group=Month)) +
      geom_boxplot() +
      scale_x_date(date_breaks="1 month", date_labels = "%b")
    

如果您不创建变量“月”,箱线图将无法与 x 刻度线很好地对齐:

【讨论】:

  • 我喜欢这些排列的方式;但是您似乎丢失了年份数据。下部图表中有 13 个月的标签(但它们确实运行 6 月至 6 月)。在顶部图表中,有 12 个月,但从 1 月到 12 月。)
  • @mediaczar,我在下方图表中看到了 12 个月。从 07 年 5 月到 08 年 6 月,就像数据一样。创建因子月份时,默认是从一月到十二月绘制,但如果我们重新排列月份,它可能是从六月到五月。用几年而不是只有 12 个月的数据来考虑这个练习......
  • 是的。下方图表上的 x 轴是有意义的。这是我遇到的最重要的图表。您还会注意到,只需观察箱线图,数据的顺序就不同了。公平地说,我以前没有使用过 lubridate 库,也没有机会了解如何解决 - 毫无疑问 - 一个很好的解决方案中的一个简单问题。
  • 请注意,箱线图的 顺序 是相同的,尽管一个系列从六月开始,另一个系列从一月开始。“六月箱线图”对于顶部和底部图表。让我们在这里得到什么其他解决方案。
猜你喜欢
  • 2017-03-04
  • 1970-01-01
  • 2020-08-28
  • 2019-09-13
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多