使用 ggplot 的多年销售同步 X 轴

Synchronous X-Axis For Multiple Years of Sales with ggplot

我有从 2012-01-01 到现在 (2015-11-20) 的 1417 天的销售数据。即使使用 ggplot 的 color = as.factor(Year) 选项,我也无法弄清楚如何使用一年(1 月 1 日 - 12 月 31 日)轴和相同的一年销售额 window。

总销售额类型 int

head(df$Total.Sales)
[1] 495 699 911 846 824 949

并且我已经使用 lubridate 包从原始 Day 变量中提取 Year。

df$Day <- as.Date(as.numeric(df$Day), origin="1899-12-30") 
df$Year <- year(df$Day)

但是因为Day包含年份信息

sample(df$Day, 1)
[1] "2012-05-05"

ggplot 仍在绘制三年而不是将它们同步到同一时间段(一年,整年):

g <- ggplot(df, aes(x = Day, y = Total.Sales, color = as.factor(Year))) +
        geom_line()

我创建了一些示例数据如下

set.seed(1234)
dates <- seq(as.Date("2012-01-01"), as.Date("2015-11-20"), by = "1 day")
values <- sample(1:6000, size = length(dates))
data <- data.frame(date = dates, value = values)

顺便说一下,提供某种东西就是可重现示例的意思。

然后我准备一些额外的列

library(lubridate)
data$year <- year(data$date)
data$day_of_year <- as.Date(paste("2012",
                    month(data$date),mday(data$date), sep = "-"))

最后一行几乎可以肯定罗兰在评论中的意思。他选择闰年是正确的,因为它包含了所有可能的日期。正常年份会错过 2 月 29 日。

现在剧情由

生成
library(ggplot2)
library(scales)
g <- ggplot(data, aes(x = day_of_year, y = value, color = as.factor(year))) +
   geom_line() + scale_x_date(labels = date_format("%m/%d"))

我调用 scale_x_date 来定义没有年份的 x 轴标签。这依赖于包 scales 中的函数 date_format。字符串 "%m/%d" 定义日期格式。如果您想了解更多有关这些格式字符串的信息,请使用 ?strptime.

图形如下:

您可以立即看出此表示可能存在的问题。在这个情节上很难区分任何东西。但这当然也与我的样本数据差异很大这一事实有关。您的数据可能看起来不同。否则,请考虑使用分面(参见 ?facet_grid?facet_wrap)。