如何用ggplot2高亮正态概率曲线多区域并添加图例?
解决ggplot2高亮正态曲线多区域并添加图例的问题
问题原因
多次调用gghighlight会导致数据图层的过滤逻辑冲突——gghighlight本质是对当前图层的数据筛选后渲染,叠加使用会打乱数据的原始映射,因此无法正常工作。更稳定的方式是先给数据标记区域分组,再通过fill映射实现多区域高亮并自动生成图例。
解决方案代码
library(dplyr) library(ggplot2) # 生成数据并标记区域分组 df <- data.frame(x = seq(-5, 5, length.out = 100)) %>% mutate( y = dnorm(x), # 用case_when标记每个x对应的区域 region = case_when( abs(x) < 1 ~ "区域01", x < -1.6 ~ "区域02", TRUE ~ "其他" # 非高亮区域 ) ) # 绘图:通过fill映射区域分组,自定义颜色并设置图例 ggplot(df, aes(x, y, fill = region)) + geom_area(alpha = 0.7) + # alpha调整透明度避免重叠遮挡 # 自定义各区域颜色,非高亮区域设为浅灰色 scale_fill_manual( values = c( "区域01" = "sky blue", "区域02" = "red", "其他" = "lightgray" ), # 设置图例标签(若region列已是目标标签可省略) labels = c("区域01", "区域02", "非高亮区域") ) + labs( x = "X值", y = "概率密度", fill = "区域说明" ) + theme_minimal()
关键说明
- 数据分组:用
case_when明确每个x对应的区域,确保每个数据点只属于一个分组,避免重叠逻辑冲突。 - fill映射:将
region映射到fill参数,ggplot会自动生成图例,无需额外手动添加。 - 颜色自定义:通过
scale_fill_manual精确指定每个区域的颜色,同时可以修改图例标签和标题。 - 透明度调整:添加
alpha参数可让重叠区域(若存在)更清晰,也可根据需求移除该参数。
内容的提问来源于stack exchange,提问作者Bogaso
相关产品推荐
相关产品推荐

