基于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
相关产品推荐
相关产品推荐

