Matplotlib/Pyplot shared axis for odd number of subplots

对着背影说爱祢 提交于 2019-12-13 04:31:46

问题


I am using the following code to produce an odd number of plots that I want 'butted' together and sharing axes.

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()

I found out after many searches that using pyplot.gcf().axes, I can obtain only the outer labels such that labels are not repeated.

This is exactly what I want and works well when there are even number of images.

However, when I have odd number of subplots (e.g. 4x2 defined but with only 7 subplots), as shown in the example, I want the x-axis tics to appear on the x-axis of the bottom right plot as well and not only on the left-hand side subplot.

Unfortunately, I am new and I am not allowed to post an image. Hopefully, my description is clear. If you can imagine an image similar to the one on this link


回答1:


You can turn the x and y tick labels on and off manually based on their location in the figure. This demo has some more information.

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()



来源:https://stackoverflow.com/questions/30167516/matplotlib-pyplot-shared-axis-for-odd-number-of-subplots

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!