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

基于Lattice包在R中绘制分组直方图的颜色异常问题排查

使用Lattice包绘制无颜色泄漏的分组直方图

1. 构造分组变量

先基于你的心率数据创建分组标记,将pulse < 60或pulse > 100的样本归为「异常心率」,其余归为「正常心率」,转为因子类型可保证分组顺序稳定:

library(lattice)

# 替换为你的实际数据框,以下用示例数据演示
set.seed(123)
df <- data.frame(pulse = c(rnorm(800, 75, 10), rnorm(100, 55, 5), rnorm(100, 105, 5)))

# 创建分组变量并转为因子
df$group <- ifelse(df$pulse < 60 | df$pulse > 100, "异常心率", "正常心率")
df$group <- factor(df$group, levels = c("正常心率", "异常心率"))

2. 解决颜色泄漏的核心:统一区间划分

颜色泄漏的根源是两组直方图各自计算区间(breaks),导致区间错位、条形互相“侵入”对方区域。解决办法是基于全部数据预先计算统一的breaks:

# 基于全数据集计算统一区间,也可手动指定步长如`seq(min(df$pulse), max(df$pulse), by=2)`
common_breaks <- hist(df$pulse, plot = FALSE)$breaks

3. 绘制分组直方图

根据需求选择分面展示或叠加展示:

分面展示(独立观察每组分布)

histogram(~ pulse | group, data = df,
          breaks = common_breaks,
          col = c("skyblue", "salmon"),
          layout = c(2, 1), # 两列一行布局
          main = "心率分组直方图",
          xlab = "心率值",
          ylab = "频数")

叠加展示(对比分布重叠情况)

添加透明度避免遮挡,同时保留统一breaks:

histogram(~ pulse, data = df,
          groups = group,
          breaks = common_breaks,
          col = c("skyblue", "salmon"),
          alpha = 0.6, # 透明度
          auto.key = list(title = "分组", columns = 2), # 图例
          main = "心率分组叠加直方图",
          xlab = "心率值",
          ylab = "频数")

关键说明

  • 统一breaks是解决颜色泄漏的核心,确保两组使用完全一致的区间划分,避免条形错位。
  • 分组变量转为因子可固定分组顺序,避免绘图时分组顺序随机变化。

内容的提问来源于stack exchange,提问作者atlas-wants

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:05:21