如何在ggplot2双geom_points绘图中添加图例?
解决ggplot散点图添加图例的问题
你的代码直接在geom_point()中指定固定颜色(未放在aes()映射里),所以ggplot不会生成图例。要显示图例,核心是让颜色与数据变量建立映射关系,具体操作如下:
1. 把宽格式数据转为长格式
ggplot更适合处理长格式数据,用tidyr::pivot_longer()将RV和BOP两列合并,生成代表变量名的新列:
library(tidyr) # 先添加x列到数据框,再转长格式 vehicles_long <- vehicles %>% mutate(x = seq(1, 108)) %>% pivot_longer(cols = c(RV, BOP), names_to = "指标", values_to = "数值")
2. 绘制带图例的散点图
现在只需一个geom_point(),在aes()中把color映射到新生成的变量列,同时可自定义颜色:
library(ggplot2) scatter <- ggplot(vehicles_long, aes(x = x, y = 数值, color = 指标)) + geom_point(size = 2) + # 自定义对应颜色,和原代码保持一致 scale_color_manual(values = c("RV" = "blue", "BOP" = "red")) scatter
关键说明
- 只有当颜色、形状等属性被放在
aes()内部,作为数据变量的映射时,ggplot才会自动生成图例。 - 直接在
geom_point()外指定color="blue"属于固定图层样式,不会触发图例生成。
内容的提问来源于stack exchange,提问作者Alejandro Zúñiga González
相关产品推荐
相关产品推荐

