使用 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
)。
我有从 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
)。