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

如何使用gghighlight添加两个高亮图层?蓝点被覆盖问题求助

解决gghighlight叠加后仅显示最后一个高亮图层的问题

问题原因

每次调用gghighlight()时,会自动筛选ggplot的数据,仅保留符合当前条件的行。后续的图层(包括第二次gghighlight和geom_point)都会基于这个筛选后的数据绘制,导致第一次的蓝色高亮数据被覆盖,最终只显示第二次筛选的绿色点。

解决方案

推荐两种更可靠的实现方式:

方式一:直接针对子集添加geom_point(无需gghighlight)

跳过gghighlight的自动筛选,手动指定每个高亮组的数据子集,分别添加点图层:

p$sp <- p$sp +
  # 绘制蓝色高亮点:pw处于前5%且fst处于前5%
  geom_point(
    data = subset(pw.fpi, pw > quantile(pw.fpi$pw, 0.95) & fst > quantile(pw.fpi$fst, 0.95)),
    color = "blue", size = 1
  ) +
  # 绘制绿色高亮点:pw处于后5%且fst处于前5%
  geom_point(
    data = subset(pw.fpi, pw < quantile(pw.fpi$pw, 0.05) & fst > quantile(pw.fpi$fst, 0.95)),
    color = "green", size = 1
  )

方式二:用一次gghighlight结合分组变量

先给数据添加分组标识,再通过颜色映射区分两类高亮:

# 先给数据添加高亮分组列
pw.fpi$highlight_group <- dplyr::case_when(
  pw > quantile(pw.fpi$pw, 0.95) & fst > quantile(pw.fpi$fst, 0.95) ~ "blue",
  pw < quantile(pw.fpi$pw, 0.05) & fst > quantile(pw.fpi$fst, 0.95) ~ "green",
  TRUE ~ NA_character_ # 非高亮组设为NA
)

# 绘制高亮点
p$sp <- p$sp +
  geom_point(aes(color = highlight_group), size = 1) +
  gghighlight(!is.na(highlight_group)) + # 仅高亮非NA的分组
  scale_color_manual(values = c("blue" = "blue", "green" = "green")) # 自定义颜色映射

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:22:33