如何固定plot绘图中y轴的刻度比例,实现多图表斜率直观对比
固定y轴刻度比例的解决方案
- 方法1:统一设置所有图表的y轴取值范围
提前计算所有待对比序列的全局y轴最值,给所有绘图语句传入相同的ylim参数,确保两张图的y轴刻度范围完全一致,不会自动适配单张图的数据范围:
import numpy as np import pandas as pd import matplotlib.pyplot as plt # 第一步:先统计所有待对比数据的全局y轴范围,可根据你的数据集列表调整取值逻辑 all_skill_values = pd.concat([df1[skill] for df1, skill in 所有待对比数据集列表]) global_y_min = all_skill_values.min() global_y_max = all_skill_values.max() # 可选:上下留5%的边距让图表更美观 y_margin = (global_y_max - global_y_min) * 0.05 fixed_ylim = (global_y_min - y_margin, global_y_max + y_margin) # 后续每张图画图时传入固定的ylim参数即可 x = np.array(range(df.shape[0])) df1[skill] = pd.to_numeric(df1[skill]) fit = np.polyfit(x, df1[skill], 1) fit_fn = np.poly1d(fit) df['fit_fn(x)'] = fit_fn(x) df[['Hodrick-Prescott filter',skill,'fit_fn(x)']].plot(title=skill + date, ylim=fixed_ylim) plt.show()
- 方法2:子图共享y轴并排对比
如果需要直接对两张图做直观对比,建议把两张图放在同一个画布的子图中,设置共享y轴,刻度比例会自动完全一致:
# 示例:两张图横向并排、共享y轴 fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 5), sharey=True) # 第一张图绘制到ax1 df1[['Hodrick-Prescott filter',skill1,'fit_fn(x)']].plot(title=skill1 + date, ax=ax1) # 第二张图绘制到ax2 df2[['Hodrick-Prescott filter',skill2,'fit_fn(x)']].plot(title=skill2 + date, ax=ax2) plt.tight_layout() plt.show()
- 方法3:固定坐标轴纵横比(可选)
如果需要严格保证斜率的视觉呈现和数值比例完全对应,可以设置轴的纵横比参数,让x轴、y轴的单位数值对应的像素长度固定:
ax = df[['Hodrick-Prescott filter',skill,'fit_fn(x)']].plot(title=skill + date) # 可调整参数值控制比例,比如equal代表x轴、y轴1单位数值的像素长度完全相等 ax.set_aspect('equal')
内容的提问来源于stack exchange,提问作者user15649753
相关产品推荐
相关产品推荐

