关于gghighlight中min/max及正负谓词用法的技术咨询
关于gghighlight中min/max类谓词的高亮逻辑解析
我搞不懂gghighlight怎么处理min、max这类非逻辑谓词,也分不清下面四幅图的差异,调整-min、-max参数后还是摸不透它们的作用机制。
对应的R代码:
library(tidyverse) library(gghighlight) library(patchwork) # 假设d是包含idx、value、type列的数据集 A <- ggplot(d, aes(idx, value, colour = type)) + geom_line() + gghighlight(max(value), max_highlight = 5L) B <- ggplot(d, aes(idx, value, colour = type)) + geom_line() + gghighlight(-max(value), max_highlight = 5L) C <- ggplot(d, aes(idx, value, colour = type)) + geom_line() + gghighlight(min(value), max_highlight = 5L) D <- ggplot(d, aes(idx, value, colour = type)) + geom_line() + gghighlight(-min(value), max_highlight = 5L) (A + B) / (C + D) + patchwork::plot_annotation(tag_levels = "A")
绘图结果:四幅子图以2×2布局排列,A、B为第一行,C、D为第二行。每幅图都包含多条彩色折线,其中5条折线被高亮显示,其余折线呈现淡化效果。
核心机制
当gghighlight()传入的是分组级数值表达式(而非逻辑判断)时,它的逻辑是:
- 按
aes()里的分组变量(这里是type)拆分数据; - 给每个分组计算表达式的结果,作为该分组的“得分”;
- 把所有分组按得分从高到低排序;
- 高亮前
max_highlight个得分最高的分组,其余分组淡化。
四幅图的差异解析
- 图A:用
max(value)当得分,得分越高说明分组的峰值越大。因此高亮的是峰值最高的5个分组。 - 图B:用
-max(value)当得分,得分越高对应原分组的峰值越小(比如峰值为2的分组得分是-2,比峰值10的得分-10更高)。因此高亮的是峰值最低的5个分组。 - 图C:用
min(value)当得分,得分越高说明分组的谷值越大(整体数值不会太低)。因此高亮的是谷值最高的5个分组。 - 图D:用
-min(value)当得分,得分越高对应原分组的谷值越小(比如谷值为-5的分组得分是5,比谷值1的得分-1更高)。因此高亮的是谷值最低的5个分组。
内容的提问来源于stack exchange,提问作者a.sa.5969
相关产品推荐
相关产品推荐

