如何使用R语言按分组展示月度数据趋势并绘制ggplot可视化图表
解决方案
错误原因梳理
- 无需调用
pivot_longer做长宽转换:你的数据中Group字段本身已存储每条记录所属的G1/G2/G3分组,原代码尝试对不存在的G1~G6列做转换是核心错误 - ggplot映射逻辑错误:y轴需要的是按月+分组的统计值,不能直接写入
sum(Group)或Group作为y轴映射,需要先做数据汇总,或在ggplot中调用统计函数计算
实现代码
# 读入原始数据 df <- read.table(text = "ID Date Freq Gender Trt month Group 15 A1 2019-01-29 1 female 1 1 G1 16 A1 2019-04-27 10 female 1 4 G1 17 A1 2019-04-27 10 female 1 4 G1 18 A1 2019-04-29 2 female 1 4 G1 19 A1 2019-04-29 12 female 1 4 G1 20 A1 2019-10-09 6 female 1 10 G1 21 A1 2019-12-26 NA female 1 12 G1 22 A1 2019-12-26 NA female 1 12 G1 27 A1 2019-02-19 5 female 1 2 G1 28 A2 2019-02-19 15 male 0 2 G3 37 A3 2019-01-30 NA female 0 1 G2 38 A3 2019-01-30 9 female 0 1 G2 39 A3 2019-02-15 11 female 0 2 G2 40 A3 2019-02-15 10 female 0 2 G2 41 A3 2019-03-16 1 female 0 3 G2 42 A3 2019-04-01 1 female 0 4 G2 43 A3 2019-04-01 3 female 0 4 G2 44 A3 2019-04-22 2 female 0 4 G2 45 A3 2019-05-25 4 female 0 5 G2 46 A3 2019-05-29 4 female 0 5 G2 47 A3 2019-06-06 19 female 0 6 G2", header = T) # 日期处理(原有逻辑正确) df$Date <- as.Date(df$Date) df$year <- as.numeric(format(df$Date, "%Y")) # 加载依赖包 library(dplyr) library(ggplot2)
需求1:按G分组展示月度计数趋势,不同分组用颜色区分
若需要统计月度频次总和可将汇总逻辑中的n()替换为sum(Freq, na.rm = T)
# 数据汇总:按分组+月份统计记录数 df_summary <- df %>% group_by(Group, month) %>% summarise(count = n(), .groups = "drop") # 绘图 ggplot(df_summary, aes(x = factor(month, levels = 1:12), y = count, color = Group, group = Group)) + geom_line(linewidth = 1, alpha = 0.8) + geom_point(size = 2) + scale_color_brewer(name = "分组", palette = "Set1") + labs(x = "月份", y = "月度计数") + theme_bw()
需求2:同时展示Trt变量的差异
用线型区分不同Trt值,避免线条重叠
# 汇总时增加Trt维度 df_summary_trt <- df %>% group_by(Group, month, Trt) %>% summarise(count = n(), .groups = "drop") # 绘图:颜色区分G分组,线型区分Trt ggplot(df_summary_trt, aes(x = factor(month, levels = 1:12), y = count, color = Group, group = interaction(Group, Trt), linetype = factor(Trt))) + geom_line(linewidth = 1, alpha = 0.8) + geom_point(size = 2) + scale_color_brewer(name = "分组", palette = "Set1") + scale_linetype_discrete(name = "Trt值") + labs(x = "月份", y = "月度计数") + theme_bw()
可选描述性统计方案
- 月度分组柱状图:把
geom_line+geom_point替换为geom_col(position = position_dodge(0.8)),更适合对比同月份不同分组的数值差异 - 分面可视化:增加
facet_wrap(~Trt)可分别展示不同Trt下各G分组的趋势,避免线条重叠 - 累计趋势图:汇总时按分组+月份排序后计算累计计数,可展示全年各分组的累计增长情况
内容的提问来源于stack exchange,提问作者Cryena
相关产品推荐
相关产品推荐

