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

如何使用ggplot2的geom_line绘制按星期分组的月度数据折线图?

如何使用ggplot2的geom_line绘制按星期分组的月度数据折线图?

嘿,我懂你的困惑!问题出在你的数据格式上——你现在用的是宽格式(每个月份单独一列),但ggplot2绘制多条折线的时候,更适合用长格式数据。我来一步步帮你搞定:

首先,先把你的数据重现出来(方便后续操作):

# 构造你的数据框
trip_id <- data.frame(
  day_of_week = c("sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"),
  feb_23 = c(24575, 32208, 41347, 25792, 21852, 38517, 24284),
  mar_23 = c(48314, 46043, 56317, 51056, 46027, 69504, 24948),
  apr_23 = c(83366, 78434, 101060, 61445, 71823, 75012, 73140),
  may_23 = c(84074, 85285, 76440, 98910, 83957, 131155, 84078),
  jun_23 = c(116821, 122528, 101694, 94837, 117189, 104023, 130631)
)

接下来要把宽格式转成长格式,用tidyr包的pivot_longer函数就很方便:

library(tidyr)
library(ggplot2)

# 转换成长格式:把所有月份列合并成一列,数值对应到另一列
trip_long <- trip_id %>%
  pivot_longer(
    cols = -day_of_week,  # 排除星期列,剩下的都是月份列
    names_to = "month",   # 新的月份列名称
    values_to = "value"   # 新的数值列名称
  )

现在数据格式对了,就可以轻松绘制折线图了:

ggplot(trip_long, aes(x = month, y = value, group = day_of_week, color = day_of_week)) +
  geom_line(linewidth = 1) +  # 设置线宽让折线更明显
  geom_point(size = 2) +      # 加上数据点,方便查看每个月份的具体数值
  labs(
    title = "各星期几的月度数据趋势",
    x = "月份",
    y = "数值",
    color = "星期几"
  ) +
  theme_minimal()

给你解释下这段代码的关键部分:

  • group = day_of_week:告诉ggplot要按星期几分组,这样每个星期会单独画一条折线
  • color = day_of_week:给不同星期的折线分配不同颜色,一眼就能区分开
  • 加上geom_point是可选的,但能让数据点更清晰,方便读取具体数值

你之前直接叠加多个geom_line的方式行不通,因为每个geom_line只对应一列数据,而且没有正确按星期分组,自然出不来你想要的效果。转成长格式后,ggplot就能自动处理分组逻辑啦!

备注:内容来源于stack exchange,提问作者Luan Pereira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 12:39:37