2012-12-13 140 views
1

我正在開發一些代碼來產生一個圖上的任意數量的二維圖(地圖和簡單的輪廓圖)。 matplotlib子圖例程對此非常有用。在下面的簡化示例中,一切都按照它應該的方式工作。然而,在我真正的應用程序中 - 它使用了與subplots,contourf和colorbar完全相同的命令,只有這些命令分散在幾個例程中 - 顏色條上的標籤沒有顯示出來(儘管顏色補丁看起來沒問題)。即使經過幾個小時的閱讀文檔和搜索網頁,我甚至都沒有線索可以開始尋找問題所在。如果我有我的colorbar實例(cbar),我應該能夠找出tick標籤的位置是否有意義,如果tick標籤設置爲可見,如果我的字體設置有意義等等......但是我怎麼實際檢查這些屬性?有沒有人遇到過類似的問題? (甚至更好:找到了一個解決方案?)哦是的:如果我在實際的繪圖程序(在發出contourf命令的地方)手動創建一個新圖形和座標軸,那麼它將再次工作。但是這意味着失去對圖形佈局的所有控制等等。難道我沒有正確傳遞我的座標軸實例嗎?這是我做的:matplotlib colorbar在subplots:標籤正在消失

fig, ax = plt.subplots(nrows, ncols) 
row, col = getCurrent(...) 
plotMap(x, y, data, ax=ax[row,col], ...) 

然後,裏面plotMap:

c = ax.contourf(x, y, data, ...) 
ax.figure.colorbar(c, ax=ax, orientation="horizontal", shrink=0.8) 

正如上面所說的,下面簡單的情節和人工數據的例子正常工作:

import numpy as np 
import matplotlib.pyplot as plt 

x = np.arange(0.,360.,5.)*np.pi/180. 
y = np.arange(0.,360.,5.)*np.pi/180. 
data = np.zeros((y.size, x.size)) 
for i in range(x.size): 
    data[:,i] = np.sin(x[i]**2*y**2) 
fig, ax = plt.subplots(2,1) 
contour = ax[0].contourf(x, y, data) 
cbar = ax[0].figure.colorbar(contour, ax=ax[0], orientation='horizontal', shrink=0.8) 
contour = ax[1].contourf(x, y, data, levels=[0.01,0.05,0.1,0.05]) 
cbar = ax[1].figure.colorbar(contour, ax=ax[1], orientation='horizontal', shrink=0.8) 
plt.show() 

感謝任何幫助!

加入後一些進一步的打探:

for t in cbar.ax.get_xticklabels(): 
    print t.get_position(), t.get_text(), t.get_visible() 

顯示我正確的文本和可見=真,但是所有位置(0,0)。這可能是一個問題嗎?

順便說一句:軸標籤也有時會丟失......我在windows上使用matplotlib version 1.1.1和python 2.7.3。

+0

你可以發佈你的解決方案作爲答案,所以這被關閉?稍後您可以接受您自己的答案。 –

+0

供將來參考'plt.tight_layout()'(也是'figure'對象的一種方法)經常可以創造奇蹟。 –

回答

1

確定 - 我可以追查到它:matplotlib正在工作,因爲它應該! 錯誤被嵌入到一個實用程序中,一旦給定數量的繪圖面板被生成,該程序就會爲每個頁面(=圖)添加一些最後的觸摸。在這個程序中,我想隱藏空積板(即最後一頁),我這樣做是與

ax = fig.axes 
for i in range(axCurrent, len(ax)): 
    ax[i].set_axis_off() 

然而,axCurrent已經重置爲零當程序進入該程序對於任何網頁,但最後,因此圖中所有軸都關閉了軸。該因爲我之前添加

if axCurrent > 0: 

...解決了這個問題。

對不起,如果我偷了任何人的時間。無論如何,感謝所有想要幫助的人!