有效使用lubridate和ggplot2进行日期轴绘图

6

考虑这个例子:

library(ggplot2)
library(lubridate)

set.seed(4)
date   <- seq(from = as.POSIXct("2012-01-01"), to = as.POSIXct("2014-12-31"), by = "days")
value  <- c(rnorm(274, 50, 1), rnorm(274, 55, 1), rnorm(274, 55, 2), rnorm(274, 60, 2))
df     <- data.frame(date, value)

head(df)
#         date    value
# 1 2012-01-01 50.21675
# 2 2012-01-02 49.45751
# 3 2012-01-03 50.89114
# 4 2012-01-04 50.59598
# 5 2012-01-05 51.63562
# 6 2012-01-06 50.68928

ggplot(df, aes(x=yday(date), y=value, color=factor(year(date)))) +
  geom_line()

如何将坐标轴格式化为按月份的日期?我正在尝试确定一种干净的方式,如果可能的话,利用lubridatescale_x_date两个工具?这会生成以下图表:

Plot

也许有更好的方法来创建这种类型的图表吗?即,通过年份创建因子并将它们叠加在一起绘制?(注意:本例不使用facet_wrapfacet_grid)。

1个回答

11

一个解决方案是在您的数据框中添加一列,该列将为每行包含另一年份(对于所有行都相同),例如2015年的日期和月份。

df$days<-as.Date(format(df$date,"%d-%m-2015"),format="%d-%m-%y")

您可以使用此列作为x进行绘图。

library(scales)
ggplot(df, aes(x=days, y=value, color=factor(year(date)))) +
  geom_line()+scale_x_date(labels = date_format("%b"))

图片描述

编辑:简化了df $ days


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接