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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:18:23