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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:15:03