【问题标题】:Why can't I get the right horizontal axis labels on my ggplot2 chart?为什么我的 ggplot2 图表上没有正确的水平轴标签?
【发布时间】:2021-07-22 07:12:11
【问题描述】:

我正在尝试使用 geom_line() 使用 ggplot2 绘制分组数据帧的多面图。我的数据框有一个日期列,我想在横轴上有日期。如果我只在 aes(x=Date, ...) 中使用 Date,我会在水平轴上得到很好的标签。然而,这条线有一个几乎水平的部分,其中日期从一组的末尾跳到下一组的开头。此代码和图表显示:

dts <- seq.Date(as.Date("2020-01-01"), as.Date("2021-12-31"), by="day")

mos <- sapply(dts, month)

df <- data.frame(Date=dts, Month=mos)

nr <- nrow(df)

df$X <- rep(1, nr)

df %>%
  group_by(Month) -> dfgrp
dfgrp %>%
  group_by(Month) %>%
  mutate(Time = Date[1:n()],
         Z = cumsum(X)) %>%
  ggplot(aes(x=Date, y=Z)) +
  geom_line(color="darkgreen", size=0.5) +
  facet_grid(. ~ Month, scale="free_x") +
  theme(axis.text.x = element_text(angle=45, size=7))

当日期变化很大时,我不希望我的图表有那些几乎水平的线。我能够使用 aes() 上的整数生成没有这些线条的图表,如下所示:

dfgrp %>%
  mutate(Time = 1:n() %>% as.integer(),
         Z = cumsum(X)) %>%
  ggplot(aes(x=Time, y=Z)) +
  geom_line(color="darkgreen", size=0.5) +
  facet_grid(. ~ Month, scale="free_x") +
  scale_x_continuous(breaks = seq(from=1, to=nr, by=10) %>% as.integer(),
                     labels = function(x) as.character(dfgrp$Date[x])) +
  theme(axis.text.x = element_text(angle=45, size=7))

图表上的线条看起来像我想要的,但横轴上的日期不正确:它们在每个方面都在 2020 年 2 月结束,而数据框中的日期在 2021 年 12 月结束,而第一个图表中的日期开始并在不同方面的不同月份结束。

我尝试了很多东西,但没有任何效果。关于如何制作一个图表,其中包含上面第一个图表中的日期和上面第二个图表中的线条,有什么建议吗?

我们将不胜感激。

【问题讨论】:

  • 您有 2020 年和 2021 年的日期 - 您希望它们在同一时间尺度上显示为两个独立的系列吗?
  • @JonSpring - 不。我想要一条线,因为它出现在我的第二个图表中。我只想在该图表上放置适当的标签而不更改任何其他内容。
  • 您使用 1:n() 作为 x,因此每个月显示为 1970 年 1 月 1 日(日期格式的第 1 天)到 3 月初左右。
  • 听起来您希望 Jan 方面从 1 月 1 日开始并持续 62 天(2020 年为 31 天,2021 年为 31 天)到 3 月 2 日?这似乎让我感到困惑,因为下半场将显示为二月,而实际上又是一月。

标签: r date ggplot2 charts


【解决方案1】:

您可能希望将日期调整为同一年,但将原始年份作为变量注意:

library(lubridate)
dfgrp %>%
  group_by(Month) %>%
  mutate(year = year(Date),
         adj_date = ymd(paste(2020, month(Date), day(Date)))) %>%
         # 2020 was leap year so 2/29 won't be lost
  mutate(Time = Date[1:n()],
         Z = cumsum(X)) %>% 
  ggplot(aes(x=adj_date, y=Z, color = year, group = year)) +
  geom_line(size=0.5) +
  facet_grid(. ~ Month, scale="free_x") +
  theme(axis.text.x = element_text(angle=45, size=7))

【讨论】:

  • 有趣。但我需要线条像第二张图表那样笔直。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2023-02-15
相关资源
最近更新 更多