【发布时间】:2023-02-15 22:44:42
【问题描述】:
我有一个时间序列数据(日期列和值列)。我正在尝试每日分布图。
下图中是每周分布图,绘制了一周中几天的值。同样,我正在尝试绘制每日分布图,其中 x 轴为月,y 轴为值,该图有 10 行,其中每行为您提供日期 1、日期 2、日期 3 等等,直到日期 10(因为在一个子图中 30 天会很笨拙,所以我想将地块分为 3、1-10、11-20 和 21-31)
每周分发代码供参考:
#dummy data
start_date <- as.Date("2020-01-01")
end_date <- as.Date("2021-12-31")
date_seq <- seq(from = start_date, to = end_date, by = "day")
set.seed(123)
value <- round(runif(length(date_seq), min = 10000, max = 100000000), 0)
df <- data.frame(date = date_seq, value = value)
df$week_number <- as.numeric(format(as.Date(df$date), "%U")) + 1
df$weekday <- weekdays(as.Date(df$date))
df$year <- as.numeric(format(as.Date(df$date), "%Y"))
years <- unique(df$year)
# Create a list of ggplots, one for each year
plots <- lapply(years, function(y) {
year_df <- df[df$year == y, ]
ggplot(year_df, aes(x = week_number, y = value, color = weekday)) +
geom_line() +
scale_color_discrete(limits = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")) +
ggtitle(paste("Weekday Distribution", y)) +
xlab("Week number") +
ylab("Value") +
theme(legend.key.size = unit(0.4, "cm")) +
theme(plot.title = element_text(hjust = 0.5, vjust = 1.5))
library(cowplot)
plot_grid(plotlist = plots, ncol = 1)
所以最后,将有三个图(1 到 10 个日期、11 到 20 个日期和 21 到 31 个日期),每个图将包含 2 个子图(因为日期范围从 2020 年到 2021 年)。谁能帮我这个?
【问题讨论】:
-
我觉得这在某种程度上打败了时间序列的要点......? (其中一点是可视化自相关 - 如果您人为地从每个月中仅分离出特定日期,则会丢失此信息)。另外,您将如何处理“第 31 天”?
-
此外,您可以简单地使用构面,而不是制作图表列表
-
抱歉,我想在第三个情节中安排第 21 -31 天@tjebo
-
但是如果我不划分数据,那么我将有 30 行在一个子图中可视化?并且使用调色板很难区分线条
-
时间序列的全部要点不是划分数据,而是始终将其视为一个整体。如果你想聚合它,有特定的包可以做到这一点,特别注意
zoo包。