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

R语言ggplot2折线图能否展示多类别?宗教-收入数据绘图求助

解决方案:用ggplot绘制多类别折线图

折线图完全可以展示多个类别,你的问题根源是数据格式不对——relig_income是宽格式数据(每个收入区间是单独列),而ggplot需要长格式数据(收入区间和人数各为一列)才能方便地绘制多类别折线。

原代码的问题

  • 直接用列名向量columnames作为x轴,没有和过滤后的数据绑定,逻辑错误
  • y轴用c(relig_income$...)取了整个数据集的数值,不是过滤后天主教/无神论者的对应数据,数据完全错位
  • 宽格式数据无法让ggplot识别不同类别对应的数值

正确代码实现

library(tidyverse)

# 1. 把宽格式转成长格式,同时过滤目标宗教
tidy_relig <- relig_income %>%
  filter(religion %in% c("Catholic", "Atheist")) %>%
  pivot_longer(
    cols = `<$10k`:`>$150k`,  # 选中所有收入区间列
    names_to = "income_range",  # 新列:收入区间
    values_to = "count"  # 新列:对应人数
  )

# 2. 绘制折线图
ggplot(tidy_relig, aes(x = income_range, y = count, color = religion, group = religion)) +
  geom_line() +
  geom_point() +  # 可选:添加数据点更清晰
  labs(
    x = "收入区间",
    y = "人数",
    title = "天主教与无神论者的收入分布",
    color = "宗教类别"
  ) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # 旋转x轴标签避免重叠

代码说明

  • pivot_longer是核心:把原来的8个收入列转换成两列(income_range和count),让数据符合ggplot要求的整洁格式
  • aes里的color = religion会自动给不同宗教分配不同颜色,group = religion确保ggplot知道哪些点属于同一条线(如果去掉color,必须保留group)
  • 最后加了旋转x轴标签的主题设置,避免长标签重叠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:50:21