如何合并两个Y轴范围不同的Matplotlib绘图且保留各自原有形状
绘图变形解决方法
两组数据Y轴绝对数值差异较大,共用单一Y轴会压缩单组数据的波动幅度导致图形变形,采用双独立Y轴共享X轴的方案即可保留两组数据的原始形状。双Y轴模式下,两个Y轴的刻度范围、缩放比例完全独立,只会对绑定的序列生效,不会互相干扰,因此可以完美保留两组数据单独绘制时的形状特征。
Python Matplotlib实现代码如下:
import matplotlib.pyplot as plt # 原始数据 y1 = [3.3549674089380157, 3.3549674741748685, 3.354967474135432, 3.3549674741683244, 3.354967802849705] y2 = [2.273429505964899, 2.273429556154414, 2.2734295561240736, 2.2734295561482813, 2.2734297980416596] x = [-16.0, -13.0, -10.0, -6.0, -2.0] # 初始化画布和第一个坐标轴 fig, ax1 = plt.subplots() # 绘制y1,绑定左侧Y轴 color1 = "#ff4b5c" ax1.set_xlabel("X取值") ax1.set_ylabel("Y1取值", color=color1) ax1.plot(x, y1, color=color1, linewidth=2, label="Y1序列") ax1.tick_params(axis="y", labelcolor=color1) # 创建共享X轴的第二个坐标轴,绑定右侧Y轴 ax2 = ax1.twinx() color2 = "#1e88e5" ax2.set_ylabel("Y2取值", color=color2) ax2.plot(x, y2, color=color2, linewidth=2, label="Y2序列") ax2.tick_params(axis="y", labelcolor=color2) # 合并图例 lines1, labels1 = ax1.get_legend_handles_labels() lines2, labels2 = ax2.get_legend_handles_labels() ax1.legend(lines1 + lines2, labels1 + labels2, loc="upper left") fig.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Aryaman Velampalli
相关产品推荐
相关产品推荐

