如何延长matplotlib双对数坐标图中的线性回归拟合线以观测轴交点
代码调整方案
当前拟合线长度受限的核心原因:绘制红色线时直接复用了原始线性段的x值序列,没有基于已经得到的线性拟合趋势扩展x轴范围,仅需修改拟合线的x坐标生成逻辑,即可实现延长效果:
- 原有通过
np.polyfit计算得到的斜率m、截距c无需修改,这两个参数代表双对数坐标下线性段的固定变化趋势,是延长拟合线的计算依据。 - 不再使用原始的
linearf作为拟合线的x输入,自行生成一组覆盖更广范围的x坐标序列。由于绘图采用对数坐标轴,推荐用np.logspace生成在对数刻度上均匀分布的点,避免线在低数值区间出现视觉断档。 - 沿用原有拟合的斜率、截距计算新x序列对应的y值,直接绘制即可得到完全贴合原趋势的延长拟合线。
关键代码替换
将原有代码中计算短拟合线、绘制短拟合线的片段:
y_fit = np.exp(m*logA + c) # 以下为原有代码固定部分,无需修改: # ax.set_xscale('log') # ax.set_yscale('log') # ax.set_xlabel('f [kHz]') # ax.set_ylabel('h$_{21e}$ [A/A]') # ax.scatter(f, h21e, marker='.', color='k') # 以上为原有代码固定部分 ax.plot(linearf, y_fit, color='r', linestyle='-')
替换为以下内容:
# 定义拟合线的覆盖范围:示例从1kHz(10^0)延伸到1000kHz(10^3),共生成100个连续点,范围可按需调整 fit_x = np.logspace(0, 3, 100) # 沿用原有拟合参数计算对应y值,保证延长线和原线性段斜率、截距完全一致 log_fit_x = np.log(fit_x) y_fit_extended = np.exp(m * log_fit_x + c) # 绘制延长后的红色拟合线 ax.plot(fit_x, y_fit_extended, color='r', linestyle='-')
注意:由于采用双对数坐标轴,x轴不存在0刻度(对数坐标无法表示0值),所谓“与x轴的交点”实际是拟合线随y值降低逐步靠近x轴下限的变化趋势。可通过调整
np.logspace的上限值(比如把上限从1000kHz提到2000kHz)拉长拟合线长度,即可清晰观测到拟合线和x轴的相对位置。
内容的提问来源于stack exchange,提问作者happyRip
相关产品推荐
相关产品推荐

