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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:32:21