2013-10-11 36 views
0

我做一些次要情節使用:多的次要情節個性化

fig, ax = plt.subplots(nrows=2, ncols=3, sharex=True, sharey=True) 

然後,我想以個性化的次要情節,例如,用:

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

不過,我想,以個性化蜱類,就像刪除某些子圖的蜱和標籤一樣。 我怎麼能這樣做?

問題是,在定義之後,ax是一個numpy數組:我不知道那麼多,我知道的是它不可能使用屬性(例如,ax[0].set_yticks([]))。

+0

你是對的:每個子圖都包含在ax數組中,並且可以獨立地定製每個子圖。例如:http://matplotlib.org/examples/pylab_examples/log_demo.html – lucasg

回答

3

如果您創建了一個二維圖的數組,例如用:

>>> fig, axarray = plt.subplots(3, 4) 

然後axarray是物體的2D陣列,用含有各元素的matplotlib.axes.AxesSubplot

>>> axarray.shape 
(3, 4) 

的問題是,當你索引axarray[0],實際上是一個索引整個行該陣列的,包含幾個軸:

>>> axarray[0].shape 
(4,) 

>>> type(axarray[0]) 
numpy.ndarray 

但是,如果您分配地址

>>> type(axarray[0,0]) 
matplotlib.axes.AxesSubplot 

>>> axarray[0,0].set_title('Top left') 

設置所有陣列中的軸的屬性的一個快速的方法是將環在軸陣列上的平坦迭代器:陣列中的SA單個元件然後可以以正常的方式設置它的屬性:

for ii,ax in enumerate(axarray.flat): 
    ax.set_title('Axis %i' %ii) 

你能做的就是「解壓」的陣列成單個軸對象的嵌套元組中的軸,雖然這時候你正在處理大量行/列變得有點尷尬的另一件事情:

fig, ((ax1, ax2, ax3, ax4), (ax5, ax6, ax7, ax8), (ax9, ax10, ax11, ax12)) \ 
    = plt.subplots(3,4) 
1

當使用這種方法:

fig, ax = plt.subplots(nrows=2, ncols=3, sharex=True, sharey=True) 

你有兩個選擇,要麼調用數組ax的元素,如你所建議的(但你需要使用兩個指數或將其壓平):

ax[0][0].plot(... 
ax.flat[0].plot(... 

如果你循環繪圖,這第二行很有用。或者,您可以通過以下方式修改:

fig, ((ax1, ax2, ax3), (ax4, ax5, ax6)) = plt.subplots(nrows=2, ncols=3, sharex=True, sharey=True) 

這將取決於你的使用情況,這是更好的,我通常稱之爲陣列ax如果有機會的話我會改變次要情節的數量。