如何为同一坐标轴上的ggplot曲线添加对应图例?
多曲线绘图添加侧边图例的解决方法
基础R绘图方案
如果用基础R的plot()和lines()绘制多条曲线,核心是保证曲线颜色和图例一一对应:
- 提前定义颜色向量和图例标签,数量匹配你的11列y数据:
color_vec <- rainbow(11) # 生成11种区分度高的颜色 legend_tags <- paste0("column ", 1:11) - 初始化绘图后,循环绘制每条曲线并指定对应颜色:
# 先画第一条曲线作为基础 plot(df$interval, df[,2], type = "l", col = color_vec[1], xlab = "interval", ylab = "y value") # 循环绘制剩余10条 for (i in 3:ncol(df)) { lines(df$interval, df[,i], col = color_vec[i-1]) } - 调用
legend()添加侧边图例,注意参数匹配:legend("right", legend = legend_tags, col = color_vec, lty = 1, cex = 0.8)lty=1指定图例用实线,和曲线一致;cex可以调整图例文字大小避免溢出
ggplot2方案(更省心)
ggplot2对多组数据的图例支持更友好,需要先把宽格式数据转成长格式:
- 用
tidyr包转换数据结构:library(tidyr) library(ggplot2) df_long <- df %>% pivot_longer(cols = -interval, names_to = "group", values_to = "value") - 绘图时映射颜色到分组变量,自动生成图例,再自定义标签:
ggplot(df_long, aes(x = interval, y = value, color = group)) + geom_line() + scale_color_discrete(labels = paste0("column ", 1:11)) + theme(legend.position = "right") # 指定图例在右侧
常见问题排查
- 基础绘图图例不显示/错位:检查
legend()的col参数是否和曲线的col完全对应,lty是否匹配曲线类型 - ggplot2无图例:确认是否把数据转成了长格式,且
aes()里指定了color映射到分组变量
内容的提问来源于stack exchange,提问作者Jama
相关产品推荐
相关产品推荐

