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轴的物理意义始终是概率密度,自动缩放仅做了显示范围的适配,没有修改任何图形元素的实际数值。

内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

