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

ggplot2中使用aes(colour)时geom_jitter为何重复显示黑色点?

问题根因

这个现象和ggplot2的图层渲染顺序无关,核心是两段代码的执行逻辑完全不一样:

  • 第一段代码是连续拼接的完整绘图语句:用+把ggplot()基础画布、geom_point()原始黑色散点图层、geom_jitter()彩色抖动散点图层拼在了同一个绘图对象里,最终输出的是两个图层叠加的效果。因为geom_jitter()默认抖动幅度很小,原始位置的黑色点没有被彩色点完全盖住,就会露出来。
  • 第二段代码的三个语句是互相独立的,根本没有把两个图层加到同一张图上:
    1. 第一行仅初始化了不带任何图层的基础画布,存入变量p,不会输出任何图像
    2. 第二行是给基础画布临时加黑色散点图层,执行后会输出仅含黑色点的图,但R里临时拼接图层不会修改原本存储的p变量
    3. 第三行是给最开始那个无图层的基础画布临时加彩色抖动散点图层,执行后输出的是仅含彩色抖动点的图,自然不会出现黑色点。

复现验证

如果要让第二段代码得到和第一段完全一致的叠加效果,必须把每次加图层的结果重新赋值给变量,或者一次性拼接所有图层,代码如下:

# 方式1:逐层赋值保存修改
p <- ggplot(mpg, aes(cyl, hwy))
p <- p + geom_point()
p <- p + geom_jitter(aes(colour = class))
p # 执行后就会看到和第一段代码一致的、露出黑色原始点的效果

# 方式2:一次性拼接所有图层后输出
p <- ggplot(mpg, aes(cyl, hwy))
p + geom_point() + geom_jitter(aes(colour = class))

叠加后露出黑色点的效果如下:
黑色原始点与彩色抖动点叠加效果

如果不需要显示原始位置的黑色点,直接去掉geom_point()图层,仅保留geom_jitter()即可。

内容的提问来源于stack exchange,提问作者Eduardo Jardim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:54:36