python gridspec,x和y轴共享问题
我正在使用 gridspec 制作一个多面板图,但遇到了一些问题。我希望每一行共享不同的 y 轴,每一列共享不同的 x 轴。换句话说,就是每一行的 x 轴相同,每一列的 y 轴相同。我还想给这些轴添加标签。下面是我想表达的内容,以及生成这个图的代码(不包括我想要的轴标签):

(来源: matplotlib.org)
# row and column sharing
f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex='col', sharey='row')
ax1.plot(x, y)
ax1.set_title('Sharing x per column, y per row')
ax2.scatter(x, y)
ax3.scatter(x, 2 * y ** 2 - 1, color='r')
ax4.plot(x, 2 * y ** 2 - 1, color='r')
不过,我不能完全使用这个方法,因为我在使用 subplot2grid,这样我可以选择每个图的具体位置和大小。我尝试在 subplot2grid 调用中使用 sharex=ax1 和 sharey=ax1,但没有成功。以下是我代码中相关的部分:
ax1 = plt.subplot2grid((8,8), (2,0), colspan=2, rowspan=2)
ax2 = plt.subplot2grid((8,8), (4,0), colspan=2, rowspan=2)
ax3 = plt.subplot2grid((8,8), (6,0), colspan=2, rowspan=2)
ax4 = plt.subplot2grid((8,8), (2,2), colspan=2, rowspan=2)
ax5 = plt.subplot2grid((8,8), (4,2), colspan=2, rowspan=2)
ax6 = plt.subplot2grid((8,8), (2,4), colspan=2, rowspan=2)
ax7 = plt.subplot2grid((8,8), (1,0), colspan=2, rowspan=1)
ax8 = plt.subplot2grid((8,8), (1,2), colspan=2, rowspan=1)
ax9 = plt.subplot2grid((8,8), (1,4), colspan=2, rowspan=1)
ax10 = plt.subplot2grid((8,8), (2,6), colspan=1, rowspan=2)
1 个回答
0
跟普通的子图相比,使用 sharex/sharey=ax
和 subplot2grid
或 GridSpec
创建的子图,不仅会共享坐标范围,还会共享刻度线。
如果你想为每个子图单独设置刻度线,你需要用到 plt.setp(ax.get_xticklabels(), visible=False)
。想了解更多细节,可以查看这个链接:Python 中的 GridSpec 和共享坐标轴。