在matplotlib中绘制三个等宽、居中的面板

在matplotlib中绘制三个等宽、居中的面板,matplotlib,plot,Matplotlib,Plot,我的数据集由四个变量(x、a、b、c)组成,其中后三个变量取决于第一个变量。我想在一个图中显示这些:三个面板彼此相邻,分别有x对a,x对b,x对d的图。 现在,由于x对于每个绘图都是相同的,我希望标签只显示在最左边的面板上,因此我使用了ax。设置标签([])将它们从第二个和第三个面板中删除。 但问题是:我希望三个面板的宽度完全相同。但是,添加或删除记号标签时,绘图的宽度会更改。 此外,我希望这三个面板准确居中。到目前为止,我一直在计算每个轴的精确位置以满足这一要求,但我不知道ticklabels

我的数据集由四个变量(x、a、b、c)组成,其中后三个变量取决于第一个变量。我想在一个图中显示这些:三个面板彼此相邻,分别有x对a,x对b,x对d的图。 现在,由于x对于每个绘图都是相同的,我希望标签只显示在最左边的面板上,因此我使用了
ax。设置标签([])
将它们从第二个和第三个面板中删除。 但问题是:我希望三个面板的宽度完全相同。但是,添加或删除记号标签时,绘图的宽度会更改。 此外,我希望这三个面板准确居中。到目前为止,我一直在计算每个轴的精确位置以满足这一要求,但我不知道ticklabels+ylabel的宽度,我想知道是否有更优雅的方法来解决这个问题

非常感谢

T

例如:

fig = plt.figure(figsize=(10,5))
ax1 = fig.add_axes(0, 0, 0.3, 1])
ax1.plot(a, x)
ax1.xaxis.set_tick_params(which='major', size=5, width=1, direction='in', top='on')
ax1.yaxis.set_tick_params(which='major', size=5, width=1, direction='in', top='on')
ax1.invert_yaxis()
ax1.grid(ls=':')

ax2 = fig.add_axes([1/3+1/30, 0, 0.3, 1])
ax2.plot(b, x)
ax2.set_yticklabels([])
ax2.xaxis.set_tick_params(which='major', size=5, width=1, direction='in', top='on')
ax2.yaxis.set_tick_params(which='major', size=5, width=1, direction='in', top='on')
ax2.invert_yaxis()
ax2.grid(ls=':')

ax3 = fig.add_axes([2/3+1/30, 0, 0.3, 1])
ax3.plot(c, x)
ax3.set_yticklabels([])
ax3.xaxis.set_tick_params(which='major', size=5, width=1, direction='in', top='on')
ax3.yaxis.set_tick_params(which='major', size=5, width=1, direction='in', top='on')
ax3.invert_yaxis()
ax3.grid(ls=':')

plt.show()

欢迎来到堆栈溢出!请花点时间阅读。您需要提供一个包含玩具数据集(请参阅)。请说明您迄今为止所做的尝试,为什么不令人满意,并清楚描述您考虑使用共享x轴制作3x1 matplotlib子批次时所需的输出行为?看看这个