如何用override.aes或key_glyph修改ggplot图例的几何图形?
解决ggplot图例几何图形替换为实心正方形的问题
折线图场景
折线图默认图例是空心线框,要替换为实心正方形,核心是先用key_glyph指定图例的几何类型为点,再通过override.aes设置点的形状为实心正方形(shape=15):
library(ggplot2) # 折线图示例 ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) + geom_line(key_glyph = draw_key_point) + guides(color = guide_legend(override.aes = list(shape = 15, size = 3)))
说明:
key_glyph = draw_key_point将图例的默认线框替换为点元素override.aes用来调整点的形状(shape=15对应实心正方形)和大小,确保图例清晰
密度图场景(需保留绘图区域无填充)
密度图默认图例是空心矩形,要替换为实心正方形,同时保持绘图区域无填充,有两种实现方式:
方式1:用点元素作为图例(推荐)
直接复用折线图的思路,用draw_key_point替换图例类型,绘图时给geom_density设置fill=NA:
# 密度图示例(无填充,图例为实心正方形) ggplot(mtcars, aes(x = mpg, color = factor(cyl))) + geom_density(fill = NA, key_glyph = draw_key_point) + guides(color = guide_legend(override.aes = list(shape = 15, size = 3)))
方式2:用实心矩形作为图例
如果坚持使用矩形作为图例,可通过override.aes单独设置图例的填充色,绘图区域保持无填充:
ggplot(mtcars, aes(x = mpg, color = factor(cyl))) + geom_density(fill = NA, key_glyph = draw_key_rect) + guides(color = guide_legend(override.aes = list( fill = scales::hue_pal()(3), # 匹配颜色映射的填充色 size = 3 )))
常见误区解析
override.aes只能修改已有图例元素的属性,无法替换图例的几何类型(比如从线框换成点),必须先通过key_glyph指定目标几何类型- 密度图的绘图填充与图例填充是独立的:绘图区域通过
geom_density(fill=NA)设置无填充,图例的填充可通过override.aes单独指定,互不干扰
内容的提问来源于stack exchange,提问作者Dan Adams
相关产品推荐
相关产品推荐

