R语言如何在同一张图中绘制两个日期对象列的频率折线图
R语言双日期列频率折线同图绘制解决方案
首先明确结论:你需要使用pivot_longer函数对数据做长转换,这是ggplot2场景下实现同图多系列折线最规范的实现方式。
你的需求是统计两个日期列的周频分布并叠加展示,ggplot2的图层语法天然适配长表结构:每一行对应一个观测、一个分组标签,仅需一次映射就能自动生成区分两条折线的图例,也不需要重复编写图层代码。
完整可运行代码
# 需提前加载依赖包 library(tidyverse) library(lubridate) df %>% # 两列日期转为长结构:分类标签列+日期值列 pivot_longer(cols = c(Date1, Date2), names_to = "日期类型", values_to = "日期") %>% # 清理Date2自带的空值,避免统计异常 drop_na(日期) %>% # 计算对应周数 mutate(周数 = week(日期)) %>% ggplot(aes(x = 周数, color = 日期类型)) + geom_freqpoly(linewidth = 1) + # 自定义图表标签 labs(x = "年度周序", y = "出现频次", color = "日期列类别") + theme_minimal()
不使用pivot_longer的替代方案
如果不想做数据重构,也可以分别为两个日期列指定geom图层,但是该写法后续调整样式需要修改两处代码,也容易出现映射冲突,仅适合临时快速绘图场景:
df %>% mutate(week1 = week(Date1), week2 = week(Date2)) %>% ggplot() + geom_freqpoly(aes(x = week1, color = "Date1"), linewidth = 1) + geom_freqpoly(aes(x = week2, color = "Date2"), linewidth = 1) + labs(x = "年度周序", y = "出现频次", color = "日期列类别") + theme_minimal()
内容的提问来源于stack exchange,提问作者Espejito
相关产品推荐
相关产品推荐

