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
相关产品推荐
相关产品推荐

