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

如何在ggplot2中仅为特定阈值上下的点着色?

解决方案

你可以通过分图层绘制点来实现需求:先绘制中间区域的灰色点,再分别绘制上下阈值外的、保留物种颜色的点,具体代码如下:

color_above <- mean(iris$Sepal.Width) + sd(iris$Sepal.Width)
color_below <- mean(iris$Sepal.Width) - sd(iris$Sepal.Width)

# 获取ggplot默认的物种配色,保证和原代码颜色一致
species_colors <- scales::hue_pal()(3)
names(species_colors) <- unique(iris$Species)

ggplot(data=iris, aes(x = Sepal.Length, y = Sepal.Width)) +
  # 绘制中间阈值内的灰色点
  geom_point(data = subset(iris, Sepal.Width >= color_below & Sepal.Width <= color_above),
             aes(shape = Species), color = "gray50") +
  # 绘制阈值上方的点,保留物种颜色
  geom_point(data = subset(iris, Sepal.Width > color_above),
             aes(shape = Species, color = Species)) +
  # 绘制阈值下方的点,保留物种颜色
  geom_point(data = subset(iris, Sepal.Width < color_below),
             aes(shape = Species, color = Species)) +
  # 指定物种对应的颜色
  scale_color_manual(values = species_colors) +
  xlab("Sepal Length") +
  ylab("Sepal Width") +
  geom_hline(yintercept = color_above, linetype = "dashed", color = "black") +
  geom_hline(yintercept = color_below, linetype = "dashed", color = "black")

说明

  • 先提取ggplot默认的3种物种配色,确保上下点的颜色和原代码效果一致;
  • 通过subset筛选不同区域的数据,分图层绘制:中间区域的点统一设为灰色,上下区域的点保留原有的物种颜色和形状映射;
  • 这种方式不需要额外创建映射变量,完全符合你“不使用aes(color = x)”的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:09:24