Matplotlib子图设置:为每列添加共用Y轴标签及共用X轴标签
实现Matplotlib子图列共用Y轴、全局共用X轴的方案
不需要用twinx(那是实现双Y轴的工具),用Matplotlib的网格布局配合共享轴参数就能轻松实现需求。核心思路是让同列子图共享Y轴、所有子图共享X轴,再统一设置轴标签。
方法一:用plt.subplots快速实现
这是最简洁的方式,直接通过参数指定共享规则:
import matplotlib.pyplot as plt import numpy as np # 生成测试数据 x = np.linspace(0, 10, 100) y_data = [np.sin(x), np.cos(x), np.tan(x[:-10]), np.exp(-x/5)] # 创建2行2列子图:列共用Y轴,全局共用X轴 fig, axes = plt.subplots(nrows=2, ncols=2, sharex='all', sharey='col', figsize=(10, 6)) # 批量绘制子图 for ax, y in zip(axes.flat, y_data): if len(y) == len(x)-10: ax.plot(x[:-10], y) else: ax.plot(x, y) # 设置每列的Y轴标签(只需要给每列最上方的子图设置) axes[0, 0].set_ylabel('正弦/余弦值') axes[0, 1].set_ylabel('正切/指数值') # 设置全局X轴标签(用fig.supxlabel一步到位) fig.supxlabel('X轴数值') # 隐藏多余的刻度标签,让布局更整洁 # 第二列子图隐藏左侧Y标签 for ax in axes[:, 1]: ax.yaxis.set_tick_params(labelleft=False) # 第一行子图隐藏底部X标签 for ax in axes[:-1, :]: ax.xaxis.set_tick_params(labelbottom=False) # 自动调整子图间距 plt.tight_layout() plt.show()
关键参数说明
sharex='all':强制所有子图共享X轴,刻度范围、刻度值完全一致sharey='col':让每一列的子图共享Y轴,同列子图的Y轴范围统一fig.supxlabel():直接给整个图设置全局X轴标签,比单独给底部子图设置更省心
方法二:用gridspec自定义布局(适合复杂场景)
如果需要更灵活的子图布局比例,用gridspec手动指定共享规则:
import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec import numpy as np x = np.linspace(0, 10, 100) y_data = [np.sin(x), np.cos(x), np.tan(x[:-10]), np.exp(-x/5)] fig = plt.figure(figsize=(10, 6)) # 创建2行2列的网格 gs = gridspec.GridSpec(2, 2) # 创建子图并指定共享规则 ax1 = fig.add_subplot(gs[0, 0]) ax2 = fig.add_subplot(gs[1, 0], sharey=ax1) # 和ax1共享Y轴 ax3 = fig.add_subplot(gs[0, 1]) ax4 = fig.add_subplot(gs[1, 1], sharey=ax3) # 和ax3共享Y轴 # 让所有子图共享X轴 ax1.get_shared_x_axes().join(ax1, ax2, ax3, ax4) # 绘图 ax1.plot(x, y_data[0]) ax2.plot(x, y_data[1]) ax3.plot(x[:-10], y_data[2]) ax4.plot(x, y_data[3]) # 设置标签 ax1.set_ylabel('正弦/余弦值') ax3.set_ylabel('正切/指数值') fig.supxlabel('X轴数值') # 隐藏多余标签 for ax in [ax3, ax4]: ax.yaxis.set_tick_params(labelleft=False) for ax in [ax1, ax3]: ax.xaxis.set_tick_params(labelbottom=False) plt.tight_layout() plt.show()
两种方法都能实现你要的效果:每列子图共用Y轴标签,所有子图共用一个X轴标签,布局整洁统一。
内容的提问来源于stack exchange,提问作者Prajwal Kumar A
相关产品推荐
相关产品推荐

