You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 01:45:03