R语言ggplot使用geom_line绘制分组折线图点未连接问题求助
问题修复方案
导致该问题的常见原因及解决步骤如下:
- 先检查数据字段类型和分布
运行以下代码查看数据结构:
str(annual)
需要确认两个核心字段的状态:
Total字段是否为数值型:如果读入时带千位分隔符等特殊符号,会被识别为字符/因子类型,ggplot无法按连续数值绘制跨年份连线- 确认每个
Offence Category+Year组合下是否只有1条Total记录:如果同一个分组同一个年份有多条数据,geom_line会先绘制同x值下的垂直连线,无法生成跨年份的连续折线
- 对应修复代码
情况1:Total为非数值型
先清洗Total字段再绘图:
# 去除千位分隔符后转换为数值格式 annual$Total <- as.numeric(gsub(",", "", annual$Total)) # 绘图,新增color映射区分不同类别的折线 ggplot(data = annual, aes(x = as.numeric(as.character(Year)), y = Total, group = `Offence Category`, color = `Offence Category`)) + geom_line(linewidth = 1)
注:如果Year本身是因子类型,需要先转成字符再转数值,避免因子编码替代实际年份值导致x轴错乱
情况2:同分组同年份存在多条记录
先聚合汇总再绘图:
library(dplyr) # 按年份和犯罪类别聚合求和,处理重复值 annual_agg <- annual %>% group_by(Year, `Offence Category`) %>% summarise(Total = sum(Total, na.rm = TRUE), .groups = "drop") # 基于聚合后的数据绘图 ggplot(data = annual_agg, aes(x = as.numeric(as.character(Year)), y = Total, group = `Offence Category`, color = `Offence Category`)) + geom_line(linewidth = 1)
内容的提问来源于stack exchange,提问作者Luke Hansen
相关产品推荐
相关产品推荐

