如何使用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
相关产品推荐
相关产品推荐

