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

matplotlib绘制等行数数据集直方图Y轴计数显示异常排查

同总行数数据集直方图计数差异异常问题

数据集基础校验结果

两个待对比数据集经校验行数、列数完全一致,校验代码及输出如下:

>>> df = load_diffae()
>>> print(df.shape)
(360000, 5)
>>> dfn = load_diffne()
>>> print(dfn.shape)
(360000, 5)

异常表现

两个数据集总行数均为36万,但绘制出的直方图Y轴计数显示新数据集的数值远高于旧数据集,实际效果如下:
两组数据直方图计数异常截图

绘图所用代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
from Extract_elevation import *

def load_diffae():
    df = dfl
    return df 

def load_diffd():
    dfn = dfld
    return dfn 

def Plot_show_eu(df,dfd, dfn):

    x = dfe['O18ad']
    z = dfne['O18nd']
    bins = np.linspace(-50, 1, 40)
    bins = 'auto'
    plt.hist(x, bins, alpha=0.65, label='alt')
    plt.hist(z, bins, alpha=0.65, label='new')
    plt.legend(loc='upper right') 

异常可能诱因

  • 变量作用域错误:绘图函数Plot_show_eu虽然声明了df、dfd、dfn三个入参,但内部取绘图数据时调用的是全局作用域下的dfe、dfne变量,完全没有使用之前校验过行数为36万的传入数据集。如果全局作用域下的dfe本身是有效样本量远低于36万的残缺数据,自然会出现旧数据集直方图计数远低于新数据集的情况。
  • 列空值率差异过大:matplotlib的hist方法默认会自动忽略NaN、空值,不会计入统计。即使两个DataFrame总行数一致,如果旧数据集绘图取用的O18ad列空值量远高于新数据集的O18nd列,实际参与直方图统计的有效样本量会存在明显差距。
  • 分箱规则不统一:代码中先定义了固定区间、固定数量的分箱数组,随后又将bins参数覆盖为'auto'。连续两次调用hist传入bins='auto'时,matplotlib会针对当前传入的单组数据单独计算适配的分箱宽度,不会强制两组图使用完全一致的分箱边界:如果新数据集数值分布更集中,自动生成的单箱宽度更宽,单箱覆盖的样本数就会更高;旧数据集分布更分散时自动分箱粒度更细,单箱计数自然更低。
  • 函数名拼写不匹配:代码中定义的新数据集加载函数名为load_diffd,但校验数据集shape时调用的是load_diffne,存在拼写偏差,很可能校验shape用的数据集和实际绘图取用的数据集不是同一个对象,绘图时调用的新数据集实际有效行数远高于36万。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:15:33