2014-04-01 55 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) 

得到的情节看起来很好。