如何移除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.
相关产品推荐
相关产品推荐

