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

ggplot2绘图添加图例及aes()函数配置问题求助

问题根因

ggplot2只有将图形属性(颜色、形状、填充等)写在aes()函数内部并绑定分类变量时,才会自动生成图例。你当前的代码把所有颜色、形状参数都放在aes()外部,同时提前定义的cols、fills向量也没有被调用,因此无法生成图例。

修正后完整代码

library(readxl)
library(ggplot2)
library(ggpmisc)

Mydata <- read_excel('../...') # 数据文件路径
df <- subset(data.frame(x = Mydata$rc, y = Mydata$`O2 (mol/m^3)`), y > 0.051 & x > 0)         # 纳入回归的点
df2 <- subset(data.frame(x = Mydata$rc, y = Mydata$`O2 (mol/m^3)`), y < 0.051 & y > 0)        # 排除的点

ggplot() +  
  # 纳入回归的实心点+路径,aes内绑定分类标签
  geom_point(data = df, aes(x, y, color = "纳入回归", shape = "纳入回归", fill = "纳入回归")) +
  geom_path(data = df, aes(x, y, color = "纳入回归")) +
  # 排除的空心点,aes内绑定分类标签
  geom_point(data = df2, aes(x, y, color = "排除回归", shape = "排除回归", fill = "排除回归")) +
  # 拟合线,aes内绑定分类标签
  geom_smooth(data = df, aes(x, y, color = "线性拟合"), formula = y~x, method = 'lm', se = FALSE) +
  # 回归方程标注
  stat_poly_eq(data = df, formula = y~x, rr.digits = 3, coef.digits = 5, 
               aes(x, y, label = paste("atop(", after_stat(eq.label), ",", after_stat(rr.label), ")", sep = "")), 
               parse = TRUE, label.x = 'right') +
  # 坐标轴标签
  xlab(expression('dC'[O2]*'/dt (mol m'^-3*' s'^-1*')')) +
  ylab(expression('C'['O2']*' (mol m'^-3*')')) +
  # 坐标范围设置
  coord_cartesian(xlim = c(0, 0.00205), ylim = c(0,0.27), expand = c(0,0)) +
  # 手动匹配图形属性,统一图例
  scale_color_manual(values = c("纳入回归" = "blue", "排除回归" = "blue", "线性拟合" = "red"),
                     name = "类型说明") +
  scale_shape_manual(values = c("纳入回归" = 16, "排除回归" = 1),
                     name = "类型说明") +
  scale_fill_manual(values = c("纳入回归" = "blue", "排除回归" = "white"),
                    name = "类型说明") +
  # 主题调整
  theme_bw() + 
  theme(panel.border = element_blank(), 
        panel.grid.minor = element_blank(), 
        axis.line = element_line(colour = "black"),
        # 可按需调整图例位置,可选值:top/bottom/left/right/none
        legend.position = "top")

关键修改说明

  • 把不同图形元素的颜色、形状、填充规则都移到aes()内部,通过自定义字符串绑定分类,触发图例自动生成
  • 用scale_*_manual系列函数匹配你预设的样式,同时统一图例名称,避免多个图例拆分显示
  • 统一了两个数据集的x/y列名,代码更简洁易维护
  • 如果需要保留英文图例,只需把分类标签替换为你预先定义的Included in regression、Excluded from regression即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:45:05