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

如何移除ggplot图例符号的边框?附预测vs实际数据绘图代码

嘿,这问题我熟!要移除ggplot图里图例符号的边框,有两种实用的方法,看你是想直接修改绘图中点的样式,还是只调整图例里的符号。先把你没写完的绘图代码补全,再给你具体方案:

先补全完整的示例代码

首先把你中断的geom_ribbon部分补全,生成完整的预测值vs实际值对比图:

library(ggplot2)

# 生成随机数据
x <- seq(1: 10)
y_pred <- runif(10, min = -10, max = 10)
y_obs <- y_pred + rnorm(10)
# 模拟置信区间
Lo.95 <- y_pred - 1.96
Hi.95 <- y_pred + 1.96
my_df <- data.frame(x, y_pred, y_obs, Lo.95, Hi.95)

# 完整绘图代码
ggplot(my_df, aes(x = x, y = y_pred)) + 
  geom_line(aes(colour = "Forecasted Data"), size = 1.2) + 
  geom_point(aes(x = x, y = y_obs, colour = "Actual Data"), size = 3) + 
  geom_ribbon(aes(ymin = Lo.95, ymax = Hi.95), alpha = 0.2, fill = "gray") +
  labs(colour = "Data Type")

方法1:直接移除点的边框(图例同步生效)

默认情况下,geom_point绘制的点会带有黑色边框,图例里的对应符号也会有这个边框。如果你想让绘图里的点和图例符号都去掉边框,直接在geom_point里设置stroke = 0即可:

ggplot(my_df, aes(x = x, y = y_pred)) + 
  geom_line(aes(colour = "Forecasted Data"), size = 1.2) + 
  # 设置stroke=0移除点的边框,图例符号也会同步去掉
  geom_point(aes(x = x, y = y_obs, colour = "Actual Data"), size = 3, stroke = 0) + 
  geom_ribbon(aes(ymin = Lo.95, ymax = Hi.95), alpha = 0.2, fill = "gray") +
  labs(colour = "Data Type")

方法2:仅修改图例中的符号边框(不改变绘图点)

如果你想保留绘图中点的边框,只移除图例里的符号边框,就用guides()配合override.aes参数来单独调整图例样式:

ggplot(my_df, aes(x = x, y = y_pred)) + 
  geom_line(aes(colour = "Forecasted Data"), size = 1.2) + 
  geom_point(aes(x = x, y = y_obs, colour = "Actual Data"), size = 3) + 
  geom_ribbon(aes(ymin = Lo.95, ymax = Hi.95), alpha = 0.2, fill = "gray") +
  labs(colour = "Data Type") +
  # 只针对图例中的符号移除边框
  guides(colour = guide_legend(
    override.aes = list(stroke = 0)
  ))

额外说明

如果你的需求是移除整个图例的外边框(不是符号的边框),可以添加theme设置:

+ theme(legend.box.background = element_blank())

内容的提问来源于stack exchange,提问作者Kev W.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:28:06