日度数据转月度占比及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
相关产品推荐
相关产品推荐

