子图特定间距和单轴标签

时间:2014-10-08 12:05:43

标签: python-2.7 matplotlib subplot

关于下面发布的数字,我有两个问题。我有一个包含两种类型数据的数字,如下所示。最顶部的子图(轴句柄= ax1)应该占据图的整个宽度(已经完成),具有以下子图(左列具有手柄ax2:ax6,右列具有手柄ax7:ax11)。我希望ax2:ax11子图能够共享x / y轴,如图所示(我将在后面清理标签等),但我也希望ax1和它下面的子图之间有空间,所以我可以看到ax1的x-tick标签和x轴标签(即在ax1和ax2 / ax7之间有垂直空间)。问题1:谁能告诉我这是怎么做到的?

不需要标记每个子图(ax2:ax11)y轴。问题2:有人可以解释如何在图上放置一个y轴标签来表示ax2:ax11(ax1将有自己的y轴标签)?

我通过以下方式创建子图:

fig = figure( figsize=(5.5,7.5) )
ax1 = subplot2grid(shape=(6,2),loc=(0,0),rowspan=1,colspan=2)   # dSCD vs SZA
ax2 = subplot2grid(shape=(6,2),loc=(1,0),rowspan=1,colspan=1)   # resid @ SZA==90am
ax3 = subplot2grid(shape=(6,2),loc=(2,0),rowspan=1,colspan=1)   # resid @ SZA==91am
ax4 = subplot2grid(shape=(6,2),loc=(3,0),rowspan=1,colspan=1)   # resid @ SZA==92am
ax5 = subplot2grid(shape=(6,2),loc=(4,0),rowspan=1,colspan=1)   # resid @ SZA==93am
ax6 = subplot2grid(shape=(6,2),loc=(5,0),rowspan=1,colspan=1)   # resid @ SZA==94am

ax7 = subplot2grid(shape=(6,2),loc=(1,1),rowspan=1,colspan=1)   # resid @ SZA==90pm
ax8 = subplot2grid(shape=(6,2),loc=(2,1),rowspan=1,colspan=1)   # resid @ SZA==91pm
ax9 = subplot2grid(shape=(6,2),loc=(3,1),rowspan=1,colspan=1)   # resid @ SZA==92pm
ax10 = subplot2grid(shape=(6,2),loc=(4,1),rowspan=1,colspan=1)  # resid @ SZA==93pm
ax11 = subplot2grid(shape=(6,2),loc=(5,1),rowspan=1,colspan=1)  # resid @ SZA==93pm

fig.subplots_adjust(hspace=0,wspace=0,top=0.95)
ax1.set_xlabel('Text Text Text',fontsize=8)

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以直接使用GridSpec创建两组轴,一组位于顶部,另一组位于底部,并在它们之间留出空格。要为所有轴创建y标签,请使用图text

import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

fig = plt.figure( figsize=(5.5,7.5) )

gs1 = GridSpec(1, 1)
gs1.update(left=0.05, right=0.95, top=0.95, bottom=0.85, wspace=0.05)
ax1 = plt.subplot(gs1[0])
ax1.set_xticks([])
ax1.set_yticks([])

gs2 = GridSpec(5, 2)
gs2.update(top=0.75, hspace=0.05)

for i in gs2:
    ax = plt.subplot(i)
    ax.set_xticks([])
    ax.set_yticks([])

ax1.set_xlabel('Text Text Text',fontsize=8)
fig.text(0.03,0.45,'some label',rotation='vertical')

plt.show()

GridSpec with shared y label