pandas绘制每日数值分布直方图时分箱过宽如何解决
问题说明
待处理的DataFrame结构如下,目标是绘制直方图查看每日数值分布,默认生成的直方图分箱过宽,无法清晰识别分布特征:
date x1_count x2_count x3_count x4_count x5_count x6_count 0 2022-04-01 1981 0 0 0 0 0 1 2022-04-02 1434 1202 1802 1202 1102 1902 2 2022-04-03 1768 1869 1869 1869 1969 1189 3 2022-04-04 1823 1310 1210 1110 1610 1710 ... 29 2022-04-30 1833 1890 1810 1830 1834 1870
当前使用的代码:
df[['date','x1_count']].set_index(by='date').hist()
解决方法
分箱过宽是因为hist()方法默认采用自动分箱策略,直接通过bins参数调整分箱规则即可,另外原代码中set_index的参数写法有误,该方法不需要传by参数,直接传入列名即可。
- 快速调整:直接指定分箱总数,传入整数即可,数值越大分箱粒度越细
# 示例设置20个分箱,可根据实际观察效果调整数值 df[['date','x1_count']].set_index('date').hist(bins=20, figsize=(10,6))
- 精准控制分箱:传入列表手动定义每个分箱的边界,适合需要固定统计区间的场景
import numpy as np # 示例:以100为步长,划分0到2100的统计区间 custom_bins = np.arange(0, 2100, 100) df[['date','x1_count']].set_index('date').hist(bins=custom_bins, figsize=(10,6))
如果需要同时查看所有count字段的分布,可以批量筛选列后直接绘图,方法会自动生成排布好的子图:
# 筛选所有以_count结尾的列 count_columns = [c for c in df.columns if c.endswith('_count')] # 2行3列排布子图,每个字段15个分箱 df[count_columns].hist(bins=15, figsize=(12,8), layout=(2,3))
补充提示:如果要对比每日不同指标的数值差异,直方图不适合这类时序对比场景,建议换用折线图或分组柱状图。
内容的提问来源于stack exchange,提问作者user11555536
相关产品推荐
相关产品推荐

