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

Python Fitter库自动重缩放绘图y轴的原因与实现逻辑

Python Fitter库绘图y轴重缩放规则与实现逻辑

Fitter库的y轴自动重缩放没有特殊的轴转换逻辑,核心目的是让同一张图里的归一化直方图、拟合得到的分布概率密度曲线都能完整展示,不会出现内容截断或者比例失衡。

核心缩放规则

  • 基准锚定:绘制直方图时强制开启密度归一化(即传入density=True参数),此时直方图柱子高度代表对应区间的概率密度,所有柱子面积总和为1,首先记录所有直方图柱子的高度最大值。
  • 范围对齐:对每一个完成参数拟合的分布,在直方图覆盖的x轴取值区间内密集采样,计算每个采样点对应的概率密度值,记录所有拟合曲线的概率密度最大值。
  • 边距预留:y轴下限固定为0(概率密度不存在负值),y轴上限取「直方图最大高度、所有拟合曲线概率密度最大值」二者中的较大值,再额外上浮5%作为视觉余量,避免图形顶端贴到绘图区上边界。

源码层面的实现逻辑

重缩放逻辑写在Fitter类的plot()实例方法中,核心执行流程和以下伪代码完全一致:

import numpy as np
import matplotlib.pyplot as plt

# 绘制归一化直方图,返回柱子高度、分箱边界
bin_heights, bin_edges, _ = plt.hist(
    self.x, 
    density=True,  # 强制密度归一化,是y轴数值匹配的核心前提
    bins=self.bins
)

# 生成x轴采样点,完全覆盖直方图的取值范围
x_samples = np.linspace(bin_edges[0], bin_edges[-1], 1000)
pdf_max = 0

# 遍历所有拟合完成的分布,计算对应PDF的最大值
for dist_name, fit_res in self.fitted_pdf.items():
    current_pdf = fit_res.dist.pdf(x_samples, *fit_res.params)
    pdf_max = max(pdf_max, current_pdf.max())

# 设置y轴范围,留5%的顶部余量
plt.ylim(bottom=0, top=max(bin_heights.max(), pdf_max) * 1.05)

常见误区:有使用者误以为Fitter对y轴做了对数缩放、量纲转换或者特殊的归一化处理,实际上y轴的物理意义始终是概率密度,自动缩放仅做了显示范围的适配,没有修改任何图形元素的实际数值。

Fitter库分布拟合效果示例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:27:19