Matplotlib / Pyplot共享奇数个子图的轴

时间:2015-05-11 12:21:58

标签: python matplotlib axis-labels subplot

我使用以下代码生成奇数个图,我希望'对接' 在一起并共享轴。

import matplotlib.pyplot as plt

fig = plt.figure()

ax1 = fig.add_subplot(4,2,1)
ax1.set_yscale('log')
ax1.set_xscale('log')
plt.subplot(4,2,2, sharex=ax1, sharey=ax1)
plt.subplot(4,2,3, sharex=ax1, sharey=ax1)
plt.subplot(4,2,4, sharex=ax1, sharey=ax1)
plt.subplot(4,2,5, sharex=ax1, sharey=ax1)
plt.subplot(4,2,6, sharex=ax1, sharey=ax1)
plt.subplot(4,2,7, sharex=ax1, sharey=ax1)

plt.suptitle('The main title')
plt.xlabel('Some Value')
plt.ylabel("Value")


for ax in plt.gcf().axes:                           #To suppress Tick labels in subsequent subplots and keep only the left and bottom ones.
    print ax
    try:
        ax.label_outer()
    except:       
        pass

plt.subplots_adjust(wspace=0, hspace=0)

plt.show()

我在使用 pyplot.gcf()。轴,进行多次搜索后发现我只能获得外部标签,这样标签就不会重复了。

这正是我想要的,当有偶数张图像时效果很好。

然而,当我有奇数个子图(例如4x2定义但只有7个子图)时,如示例所示,我希望x轴抽动也出现在右下图的x轴上而不只是在左侧的子情节。

不幸的是,我是新手,我不允许发布图片。希望我的描述很清楚。如果你能想象一个类似于link

上的图像的图像

1 个答案:

答案 0 :(得分:2)

您可以根据图中的位置手动打开和关闭x和y刻度标签。这个demo有更多信息。

import matplotlib.pyplot as plt

fig = plt.figure()

# Add subplots
nRows = 4
nCols = 2
nPlots = 7
ax1 = fig.add_subplot(nRows,nCols,1)
ax1.set_yscale('log')
ax1.set_xscale('log')

for n in range(1, nPlots+1):
    plt.subplot(nRows,nCols,n, sharex=ax1, sharey=ax1)

# Turn off tick lables where needed. 
index = 0
for r in range(1, nRows +1):
     for c in range(1, nCols + 1):
         index += 1
         # Turn off y tick labels for all but the first column.
         if ((c != 1) and (index <= nPlots)):  
             ax = plt.subplot(nRows, nCols, index, sharex=ax1, sharey=ax1)
             plt.setp(ax.get_yticklabels(), visible=False)
          # Turn off x tick lables for all but the bottom plot in each 
          # column. 
         if ((nPlots - index) >= nCols):
             ax = plt.subplot(nRows, nCols, index, sharex=ax1, sharey=ax1) 
             plt.setp(ax.get_xticklabels(), visible=False)

plt.subplots_adjust(wspace=0, hspace=0)

plt.show()

subplots with labels on the bottom and left.