在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轴都可以在图中清晰地显示出来。
PyQt6学习交流群
最近组建了PyQt6学习交流群,大家积极交流,现在也100多号人,进群只能邀请,如果需要进群,加下面微信,拉进群。
代码下载
后台回复多y轴获取所有代码和文件。有时,代码的分享连接可能会晚一点送达,如果没能及时回复,稍后会补上分享连接。