【问题标题】:Plotting a bar plot with X-axis defined as a time series in ggplot2在 ggplot2 中绘制 X 轴定义为时间序列的条形图
【发布时间】:2017-08-03 13:08:58
【问题描述】:

我有一个包含 3 列的小标题,代表 3 个不同变量(a、b、c)的观察日期。

我想用 ggplo2 绘制一个条形图,其中 X 轴代表时间。独立于我的数据的时间跨度,我希望 X 轴始终代表整个月(比如说从第 1 天到第 31 天)。

test <- tibble(date=c("1/1/1","1/1/1","2/1/1","2/1/1","2/1/1","5/1/1","5/1/1","5/1/1"),
            variable=c("a","b","a","b","c","a","b","c"),
            observation=c(0.4,0.6,0.3,0.3,0.4,0.2,0.5,0.3))

ggplot(test, aes(x=as.Date(date), y=observation, fill=variable)) +
    geom_bar(position = "stack", stat = "identity") + 
    scale_x_date(date_breaks = "1 day", 
                 labels = date_format("%d/%m/%Y")) + 
theme(text = element_text(size=6), 
      axis.text.x = element_text(angle=90, hjust=1))

但是,我无法在结果图中读取 X 轴信息。我应该使用其他函数而不是 scale_x_date 来定义我的 X 轴吗?

【问题讨论】:

  • 如果唯一的问题是您无法读取 x 轴文本,您应该考虑将 scale_x_date 中的选项 date_breaks 更改为“1 个月”
  • 谢谢,杰罗恩。实际上,这不是唯一的问题。这只是一个玩具示例,在我的实际问题中,我想以 1 天的分辨率表示数据

标签: datetime ggplot2 bar-chart


【解决方案1】:

您需要在as.Date() 中使用format= 选项,以便5/1/1 可以读作2001 年1 月5 日(按预期)而不是2005 年1 月1 日(按目前的做法)。

tibble(
    date =
        c(
            "1/1/1", "1/1/1", "2/1/1", "2/1/1", 
            "2/1/1", "5/1/1", "5/1/1", "5/1/1"
        ) %>%
        as.Date(format = "%d/%m/%y"),
    variable = c("a", "b", "a", "b", "c", "a", "b", "c"),
    observation = c(0.4, 0.6, 0.3, 0.3, 0.4, 0.2, 0.5, 0.3)
) %>%
    ggplot(aes(x = date, y = observation, fill = variable)) +
    geom_bar(position = "stack", stat = "identity") + 
    scale_x_date(
        date_breaks = "1 day", 
        labels = date_format("%d/%m/%Y")
    ) + 
    theme(
        text = element_text(size = 6), 
        axis.text.x = element_text(angle = 90, hjust = 1)
    )

请注意,我在您的 tibble() 中使用了 as.Date(..., format = "%d/%m/%y"),以便减少对图例的污染。

【讨论】:

    猜你喜欢
    • 2017-10-30
    • 1970-01-01
    • 2021-11-18
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多