Python Matplotlib 多 Y 轴图形绘制技巧:从双轴到四轴,一文掌握图表美化方法

在matplotlib中,绘制多Y轴图形常常使用twinx()方法。

双y轴(左右各1Y轴)

#d:/work/matplotlib/y_ax.py
# 创建图形和主Y轴
fig, ax1 = plt.subplots(figsize=(10, 6))
# 绘制第一个数据集
ax1.plot(x, y1, 'b-')
ax1.set_xlabel('X 数据')
ax1.set_ylabel('Y1 数据', color='b')
ax1.tick_params('y', colors='b')
# 创建第二个Y轴
ax2 = ax1.twinx()
ax2.plot(x, y2, 'r-')
ax2.set_ylabel('Y2 数据', color='r')
ax2.tick_params('y', colors='r')
plt.show()
fig.savefig("my_figure.png", dpi=300)  # 保存为PNG格式,DPI为300

三Y轴(左1右2)

如果您想在图的右侧多留一点空白,可以使用subplots_adjust方法调整图形的边界:

  1. 使用subplots_adjust方法

    subplots_adjust方法允许您微调图形的各个边界。其中,right参数决定了图形右侧边界的位置。

以下是调整右侧边界的代码示例:

# 调整右侧边界,使其更靠近图形的左侧,从而在图形右侧留下更多的空白。
# 值越小,右侧空白越大。默认值为1。
fig.subplots_adjust(right=0.8)  # 例如,将右边界设置为整个图形宽度的80%
plt.show()

在您提供的代码中插入上述调整后,应该可以得到一个右侧有更多空白的图形。

#d:/work/y_ax_3.py
fig, ax1 = plt.subplots(figsize=(10, 6))
# 调整右侧边界,使其更靠近图形的左侧,从而在图形右侧留下更多的空白。
# 值越小,右侧空白越大。默认值为1。
fig.subplots_adjust(right=0.8)  # 例如,将右边界设置为整个图形宽度的80%
# 绘制第一个数据集
ax1.plot(x, y1, 'b-')
ax1.set_xlabel('X 数据')
ax1.set_ylabel('Y1 数据', color='b')
ax1.tick_params('y', colors='b')
# 创建第二个Y轴
ax2 = ax1.twinx()
ax2.plot(x, y2, 'r-')
ax2.set_ylabel('Y2 数据', color='r')
ax2.tick_params('y', colors='r')
# 创建第三个Y轴
ax3 = ax1.twinx()
# 调整ax3位置,为了不与ax2重叠
ax3.spines['right'].set_position(('outward', 60))
ax3.plot(x, y3, 'g-')
ax3.set_ylabel('Y3 数据', color='g')
ax3.tick_params('y', colors='g')
plt.show()
fig.savefig("y_ax_3.png", dpi=300)  # 保存为PNG格式,DPI为300

左右各2个Y轴(左2右2)

#d:/work/y_ax_4.py
# 创建图形和主Y轴
fig, ax1 = plt.subplots(figsize=(10, 6))
# 绘制第一个数据集 - 左侧的第一个Y轴
ax1.plot(x, y1, 'b-')
ax1.set_xlabel('X 数据')
ax1.set_ylabel('Y1 数据', color='b')
ax1.tick_params('y', colors='b')
# 创建左侧的第二个Y轴
ax2 = ax1.twinx()
# 调整ax2的位置,为了不与ax1重叠
ax2.spines['left'].set_position(('outward', 60))
ax2.yaxis.set_ticks_position('left')
ax2.yaxis.set_label_position('left')
ax2.plot(x, y2, 'g-')
ax2.set_ylabel('Y2 数据', color='g')
ax2.tick_params('y', colors='g')
# 创建右侧的第一个Y轴
ax3 = ax1.twinx()
ax3.plot(x, y3, 'r-')
ax3.set_ylabel('Y3 数据', color='r')
ax3.tick_params('y', colors='r')
# 创建右侧的第二个Y轴
ax4 = ax1.twinx()
# 调整ax4的位置,为了不与ax3重叠
ax4.spines['right'].set_position(('outward', 60))
ax4.plot(x, y4, 'm-')
ax4.set_ylabel('Y4 数据', color='m')
ax4.tick_params('y', colors='m')
# 调整图的边界,为了有更多的空白来展示所有的y轴
fig.subplots_adjust(left=0.2, right=0.8)
plt.show()
fig.savefig("y_ax_4.png", dpi=300)  # 保存为PNG格式,DPI为300
  1. ax1是最左侧的Y轴。
  2. ax2是左侧的第二个Y轴,它向左移动了一些,以便与ax1分开。
  3. ax3是右侧的第一个Y轴。
  4. ax4是右侧的第二个Y轴,它向右移动了一些,以便与ax3分开。

最后,通过fig.subplots_adjust方法,我们调整了图的左侧和右侧的边界,以确保所有的Y轴都可以在图中清晰地显示出来。

PyQt6学习交流群

最近组建了PyQt6学习交流群,大家积极交流,现在也100多号人,进群只能邀请,如果需要进群,加下面微信,拉进群。

代码下载

后台回复多y轴获取所有代码和文件。有时,代码的分享连接可能会晚一点送达,如果没能及时回复,稍后会补上分享连接。