ggplot2中fill图例何时显示圆点?底层机制解析
ggplot2中
fill图例显示圆点的规则解析 首先执行以下代码生成基础绘图对象p:
library(ggplot2) # ggplot2_3.4.2 data.frame(x = 1, y = 2) |> ggplot(aes(x, y)) + geom_col(aes(fill = 'a')) + scale_fill_grey(start = .5) -> p
观察三种不同绘图的fill图例表现:
- 直接绘制
p:fill图例无圆点 - 执行
p + geom_point(aes(color = 'b')):fill图例仍无圆点 - 执行
p + geom_point(aes(color = 'b', fill = 'a')):fill图例出现圆点
核心规则
ggplot2的图例生成逻辑是将所有绑定了fill映射的图形元素(称为glyphs)叠加显示:
- 前两种情况中,
geom_point仅绑定了color映射,未对fill做映射,因此fill图例只包含geom_col对应的填充矩形,不会出现圆点。 - 第三种情况里,
geom_point同时绑定了fill = 'a'的映射,此时fill图例会叠加显示geom_col的填充矩形和geom_point的圆点符号。
进阶验证示例
初始代码:
ggplot(mapping = aes(x = 1, y = 2)) + geom_col(aes(fill = c('a', 'b'))) + geom_point( aes( color = c('x', 'y'), # fill = c('m', 'n') # (*) ), shape = 'circle filled', size = 9, position = position_jitter(seed = 1)) + # geom_point(aes(fill = 'p'), shape = 'diamond', size = 3) + # (**) # geom_point(aes(fill = 'q'), shape = 'plus', size = 4, color = 'white') + # (***) scale_color_brewer('COLOR', palette = 'Set1') + scale_fill_brewer('FILL', palette = 'Accent')
执行后:fill图例仅显示geom_col对应的两个填充矩形,color图例显示geom_point的两个圆点。
- 取消注释
(*):geom_point绑定了fill映射,fill图例新增'm'、'n'条目,同时叠加显示圆点符号。 - 取消注释
(**):新增绑定fill的菱形点图层,fill图例中会叠加显示菱形符号。 - 取消注释
(***):新增绑定fill的十字符号图层,即使该图层的color未做映射,十字符号仍会叠加到fill图例中。
另外,若将geom_col移至所有geom_point之后,图例中的圆点会被填充矩形遮挡,这直观体现了glyphs的叠加顺序——图层顺序决定图例符号的叠加顺序。
内容的提问来源于stack exchange,提问作者banbh
相关产品推荐
相关产品推荐

