matplotlib 不同宽度的子图共享相同的x轴

7lrncoxx  于 2023-11-22  发布在  其他
关注(0)|答案(2)|浏览(194)

我想要3行子图,每行子图的宽度不同,但它们都共享相同的X轴,例如下面的粗略模型。如何做到这一点?即使在GridSpec调整的图中,我也可以使用sharex=True吗?


的数据

xcitsw88

xcitsw881#

您可以手动放置轴,或者另一种方法是使用inset_axes:

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. fig, axs = plt.subplots(3, 1, constrained_layout=True, sharex=True, sharey=True)
  4. ylim=[-3, 3]
  5. axs[2].plot(np.random.randn(500))
  6. axs[2].set_ylim(ylim)
  7. xlim = axs[2].get_xlim()
  8. ax0 = axs[0].inset_axes([300, ylim[0], xlim[1]-300, ylim[1]-ylim[0]], transform=axs[0].transData)
  9. ax0.set_ylim(ylim)
  10. ax0.set_xlim([300, xlim[1]])
  11. axs[0].axis('off')
  12. ax0.plot(np.arange(300, 500), np.random.randn(200))
  13. ax1 = axs[1].inset_axes([150, ylim[0], xlim[1] - 150, ylim[1]-ylim[0]], transform=axs[1].transData)
  14. ax1.set_ylim(ylim)
  15. ax1.set_xlim([150, xlim[1]])
  16. axs[1].axis('off')
  17. ax1.plot(np.arange(150, 500), np.random.randn(350))
  18. plt.show()

字符串


的数据

展开查看全部
irtuqstp

irtuqstp2#

您可以在创建子图时传递哪些轴用作共享轴的参考

  1. fig = plt.figure()
  2. gs = matplotlib.gridspec.GridSpec(3,3, figure=fig)
  3. ax1 = fig.add_subplot(gs[0,2])
  4. ax2 = fig.add_subplot(gs[1,1:], sharex=ax1)
  5. ax3 = fig.add_subplot(gs[2,:], sharex=ax1)
  6. ax1.plot([1,5,0])

字符串


的数据

相关问题