2014-04-01 54 views
0

我想要繪製一個圖形,這是matplotlib中的繪圖網格內的一塊陰謀。我正在使用matplotlib 1.1.1和python 2.7.4。使用Gridspec在網格中繪製網格的問題

我下面的文檔在此頁面上的例子:http://matplotlib.org/users/gridspec.html#a-complex-nested-gridspec-using-subplotspec

fig = plt.figure(figsize=(11, 10)) 
levels2=[2,8,32,64,128, 256, 512] 
bins=100 

def plotcmd(ax, x, y, bins, levels): 
    cmap=cm.Greys 
    cmap.set_gamma(0.8) 

    h, xe, ye = np.histogram2d(x, y, bins=70) 
    cont = ax.contourf(h.T, extent=[xe[0],xe[-1], ye[0],ye[-1]], levels=levels, 
     zorder=2, cmap=cmap) 
    cont = ax.contour(h.T, extent=[xe[0],xe[-1], ye[0],ye[-1]], levels=levels, zorder=3, 
     colors=('black', 'black', 'black','black')) 
    # set limits 
    plt.xlim(-1, 5) 
    plt.ylim(13, 2) 


for i in xrange(4): 
    inner_grid = gridspec.GridSpecFromSubplotSpec(1, 3, 
     subplot_spec=outer_grid[i], wspace=0.0, hspace=0.0) 
    for j in xrange(3): 
     ax = plt.Subplot(fig, inner_grid[j]) 
     plotcmd(ax, data1[:,0]-data1[:,1], data1[:,1], bins, levels2) 
     ax.set_xticks([]) 
     ax.set_yticks([]) 
     fig.add_subplot(ax) 

所以這應該創建一個具有四個外板各託管三個內部面板的人物。它幾乎是正確的,但最終情節有兩個問題:

1.)最終的情節,所以當我== 3和j == 2,不堅持我在plotcmd中設置的限制,就好像它們不存在一樣

2.)在四個大面板下面正在繪製一個圖。

我不明白爲什麼,如果所有跡象都表明我正確地迭代了外部和內部網格,那麼x和y限制不會影響最終圖。

感謝您的任何幫助。

Alexa的

+0

1)1.1是一個非常舊的版本,並且這些文檔是針對較新版本編寫的,請在1.3 2)上嘗試您的代碼,否則請將其減少到複製問題所需的最小代碼量。 – tacaswell

回答

0

由於tcaswell建議我升級我的版本matplotlib到1.3.2但沒有解決不了的問題gridspec,但我能得到它的工作,因爲我想它。

我並不明白爲什麼我以前的代碼了,它沒有效果,但一旦我改變了我的plotcmd功能看起來像這樣:

def plotcmd(x, y, bins, levels, ax): 
    h, xe, ye = np.histogram2d(x, y, bins=bins) 
    ax.contourf(h.T, extent=[xe[0],xe[-1], ye[0],ye[-1]], 
         levels=levels, zorder=2, cmap=cmap) 
    ax.contour(h.T, extent=[xe[0],xe[-1], ye[0],ye[-1]], 
         levels=levels, colors=('black', 'black', 'black','black')) 
    ax.set_xlim(-1, 5) 
    ax.set_ylim(13, 2) 

得到的情節看起來很好。