【发布时间】: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 日?这似乎让我感到困惑,因为下半场将显示为二月,而实际上又是一月。