在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
方法调整图形的边界:
- 使用
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
ax1
是最左侧的Y轴。ax2
是左侧的第二个Y轴,它向左移动了一些,以便与ax1
分开。ax3
是右侧的第一个Y轴。ax4
是右侧的第二个Y轴,它向右移动了一些,以便与ax3
分开。
最后,通过fig.subplots_adjust
方法,我们调整了图的左侧和右侧的边界,以确保所有的Y轴都可以在图中清晰地显示出来。
代码下载
后台回复多y轴获取所有代码和文件。有时,代码的分享连接可能会晚一点送达,如果没能及时回复,稍后会补上分享连接。