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

密度图与直方图结果不一致问题求助(含ggplot2代码)

问题:ggplot2直方图与密度图形态不匹配排查方向

我有两个数据框,tableOfGraphData是vdjtoolTableTwo的严格子集(为该数据框与另一数据框的交集),二者都包含变量及对应的计数。用ggplot2绘制直方图与密度图时,发现同一数据的密度图和直方图形态不匹配:直方图里蓝色的vdjtoolTableTwo数据低频值占比更高、整体偏左,红色的tableOfGraphData数据整体偏右,但密度图的相对形态完全不符合这个特征;给密度图加adjust=1/5参数后,问题反而更严重。

绘图代码

ggplot()+
geom_histogram(data = vdjtoolTableTwo, aes(x = log10(frequency), y = after_stat(density), weight = count), fill=rgb(0,0,1,1/4)) +
geom_density(data = vdjtoolTableTwo, aes(x = log10(frequency), y = after_stat(density), weight = count), fill="black", alpha = 0.25)+
geom_histogram(data = tableOfGraphData, aes(x = log10(frequency.y), y = after_stat(density), weight = count.y), fill=rgb(1,0,0,1/4)) +
geom_density(data = tableOfGraphData, aes(x = log10(frequency.y), y = after_stat(density),  weight = count.y), fill = "red", alpha = 0.25)+
coord_cartesian(xlim = scale)

结果说明

  • 初始结果:蓝色直方图偏左、低频占比高,红色直方图偏右,但对应蓝色数据的黑色密度图、对应红色数据的红色密度图,形态和直方图特征完全相反。
  • 添加adjust=1/5后:密度图的形态异常问题进一步加剧。

排查方向

  • 统一直方图分箱宽度:默认geom_histogram的binwidth是自动计算的,两个直方图可能用了不同分箱宽度导致视觉偏差。显式设置统一的binwidth(比如binwidth=0.1),确保分箱逻辑一致后再对比。
  • 验证权重参数逻辑:weight在直方图和密度图中的计算逻辑是否一致。可以尝试去掉weight,用展开后的原始数据(而非汇总计数)重新绘图,看形态是否匹配。
  • 核对x轴变量一致性:确认log10(frequency)和log10(frequency.y)是同一含义的变量,是否存在频率计算方式不同导致的log转换偏差。
  • 调整核密度带宽:默认带宽可能不适合数据分布,尝试手动设置geom_density的bw参数(而非adjust),比如bw=0.2,观察密度图是否和直方图形态匹配。
  • 检查子集数据正确性:确认tableOfGraphData确实是vdjtoolTableTwo的严格子集,排查交集计算时的变量匹配、过滤条件是否出错,可通过对比总计数、抽样数据点验证。
  • 移除坐标限制测试:coord_cartesian(xlim = scale)可能截断数据导致计算偏差,去掉该限制后查看完整分布,判断是否是截断引发的形态不匹配。

内容的提问来源于stack exchange,提问作者3luke33

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:05:38