我正在尝试制作一个数字,这是matplotlib中的图形网格中的一组图。我正在使用matplotlib 1.1.1和python 2.7.4。
我按照此文档页面上的示例进行操作: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。)最终的情节,所以当i == 3和j == 2时,不符合我在plotcmd中设置的限制,就好像它们不存在一样
2。)在四个大面板下方正在绘制一个数字。
我不明白为什么,如果所有迹象表明我正在正确地迭代外部网格和内部网格,那么x和y限制不会影响最终的情节。
感谢您的帮助。
的Alexa
答案 0 :(得分: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)
结果情节看起来很好。