如何格式化 data.frame 和 ggplot 中的日期?

How to format dates in data.frame and ggplot?

我有以下数据框:

df <- data.frame(A=c("2019-01", "2019-02", "2019-03", "2019-04", "2019-05"),
             B=c(12.5, 24.5, 23.4, 45.0, 12.0))
## + > df
##         A    B
## 1 2019-01 12.5
## 2 2019-02 24.5
## 3 2019-03 23.4
## 4 2019-04 45.0
## 5 2019-05 12.0

其中 A 列包含日期 (YYYY-MM),B 列包含与这些日期对应的观察结果。

我想使用 ggplot2 绘制图表,我需要日期以 MM-YY 格式沿 X 轴显示,例如Jan-19.

下次请考虑给我们一个可重现的例子,并以更准确的方式说明您的问题。

尽管如此,根据您提供的信息,您可以执行以下操作:

首先,让我们用正确的日期数据制作一个矢量,以避免进一步的问题。我假设您的观察是在本月的第一天完成的,因此您的向量 A 将是:

A <- paste0(c("2019-01", "2019-02", "2019-03", "2019-04", "2019-05"), "-01")

如果我们直接创建 data.frame 它将是:

df <- data.frame(A=paste0(c("2019-01", "2019-02", "2019-03", "2019-04", "2019-05"), "-01"),
             B=c(12.5, 24.5, 23.4, 45.0, 12.0), stringsAsFactors = FALSE)

或使用magrittr:

library(magrittr)
df <- paste0(c("2019-01", "2019-02", "2019-03", "2019-04", "2019-05"), "-01") %>%
        data.frame(A=.,B=c(12.5, 24.5, 23.4, 45.0, 12.0), stringsAsFactors = FALSE)

然后我们将A格式化为日期:

df$A <- as.Date(df$A, format="%Y-%m-%d")

要绘制它,您应该执行以下操作:

library(ggplot2)
ggplot(data = df, aes(x=A, y=B)) +
  geom_line() +
  scale_x_date(date_labels = "%b-%y", date_breaks = "1 month") +
  theme_light() +
  labs(x="time") +
  theme(legend.position = "bottom")

希望对您有所帮助

PS:查看此 post 关于 date formats