我想要3行子图,每行子图的宽度不同,但它们都共享相同的X轴,例如下面的粗略模型。如何做到这一点?即使在GridSpec调整的图中,我也可以使用sharex=True吗?
sharex=True
的数据
xcitsw881#
您可以手动放置轴,或者另一种方法是使用inset_axes:
import matplotlib.pyplot as pltimport numpy as npfig, axs = plt.subplots(3, 1, constrained_layout=True, sharex=True, sharey=True)ylim=[-3, 3]axs[2].plot(np.random.randn(500))axs[2].set_ylim(ylim)xlim = axs[2].get_xlim()ax0 = axs[0].inset_axes([300, ylim[0], xlim[1]-300, ylim[1]-ylim[0]], transform=axs[0].transData)ax0.set_ylim(ylim)ax0.set_xlim([300, xlim[1]])axs[0].axis('off')ax0.plot(np.arange(300, 500), np.random.randn(200))ax1 = axs[1].inset_axes([150, ylim[0], xlim[1] - 150, ylim[1]-ylim[0]], transform=axs[1].transData)ax1.set_ylim(ylim)ax1.set_xlim([150, xlim[1]])axs[1].axis('off')ax1.plot(np.arange(150, 500), np.random.randn(350))plt.show()
import matplotlib.pyplot as plt
import numpy as np
fig, axs = plt.subplots(3, 1, constrained_layout=True, sharex=True, sharey=True)
ylim=[-3, 3]
axs[2].plot(np.random.randn(500))
axs[2].set_ylim(ylim)
xlim = axs[2].get_xlim()
ax0 = axs[0].inset_axes([300, ylim[0], xlim[1]-300, ylim[1]-ylim[0]], transform=axs[0].transData)
ax0.set_ylim(ylim)
ax0.set_xlim([300, xlim[1]])
axs[0].axis('off')
ax0.plot(np.arange(300, 500), np.random.randn(200))
ax1 = axs[1].inset_axes([150, ylim[0], xlim[1] - 150, ylim[1]-ylim[0]], transform=axs[1].transData)
ax1.set_ylim(ylim)
ax1.set_xlim([150, xlim[1]])
axs[1].axis('off')
ax1.plot(np.arange(150, 500), np.random.randn(350))
plt.show()
字符串
irtuqstp2#
您可以在创建子图时传递哪些轴用作共享轴的参考
fig = plt.figure()gs = matplotlib.gridspec.GridSpec(3,3, figure=fig)ax1 = fig.add_subplot(gs[0,2])ax2 = fig.add_subplot(gs[1,1:], sharex=ax1)ax3 = fig.add_subplot(gs[2,:], sharex=ax1)ax1.plot([1,5,0])
fig = plt.figure()
gs = matplotlib.gridspec.GridSpec(3,3, figure=fig)
ax1 = fig.add_subplot(gs[0,2])
ax2 = fig.add_subplot(gs[1,1:], sharex=ax1)
ax3 = fig.add_subplot(gs[2,:], sharex=ax1)
ax1.plot([1,5,0])
2条答案
按热度按时间xcitsw881#
您可以手动放置轴,或者另一种方法是使用inset_axes:
字符串
的数据
irtuqstp2#
您可以在创建子图时传递哪些轴用作共享轴的参考
字符串
的数据