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

日度数据转月度占比及ggplot2月度折线图绘制技术咨询

解决月度数据折线图的日期轴间隔问题

步骤1:计算每月X的占比

先从原始字符型日期中提取年月信息,分组计算每月X为1的占比:

library(dplyr)

# 假设原始数据框名为df
monthly_summary <- df %>%
  # 截取日期字符串前6位作为年月标识
  mutate(month_tag = substr(date, 1, 6)) %>%
  # 按年月分组
  group_by(month_tag) %>%
  # 计算占比(mean(X)等价于1的数量/总数量)
  summarize(x_ratio = mean(X)) %>%
  ungroup()

运行后会得到你需要的month_tag(如194607)和x_ratio(如0.4)的对应结果。

步骤2:修复横轴日期间隔问题

直接用194607这类数字格式会导致年末年初间隔异常(比如194612到194701的数字差为89,远大于相邻月份的数字差1),正确做法是把年月标识转换成标准日期类型:

library(lubridate)

monthly_summary <- monthly_summary %>%
  # 将年月标签拼接成当月第一天的日期(如194607→1946-07-01)
  mutate(month_date = ymd(paste0(month_tag, "01")))

步骤3:绘制折线图

用转换后的日期变量作为横轴,ggplot2会自动识别时间顺序,解决间隔异常问题:

library(ggplot2)

ggplot(monthly_summary, aes(x = month_date, y = x_ratio)) +
  geom_line(color = "#2c3e50", linewidth = 1) +
  # 自定义横轴标签格式为YYYY-MM,每月显示一个刻度
  scale_x_date(date_labels = "%Y-%m", date_breaks = "1 month") +
  labs(x = "月份", y = "X的占比") +
  # 旋转横轴标签避免重叠
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

这样绘制的折线图,年末到年初的横轴会自然衔接,不会出现不合理的大间隔。

内容的提问来源于stack exchange,提问作者KMatsuda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:35:19