在我正在使用的脚本中,代码生成一个图形,其中生成了许多子图。通常它会创建一个矩形网格图,但是对于它当前使用,水平参数只有1个值,而垂直参数的值比以前多得多。这导致我的程序在运行时崩溃,因为(可能)垂直维度太大。导致问题的代码是:
#can't get past the first line here
self.fig1 = plt.figure('Title',figsize=(4.6*numXparams,2.3*numYparams))
self.gs = gridspec.GridSpec(numYparams,numXparams)
self.gs.update(left=0.03, right=0.97, top=0.9, bottom=0.1, wspace=0.5, hspace=0.5)
然后在嵌套的for循环中运行两个参数:
ax = plt.subplot(self.gs[par0, par1])
我得到的错误是:
X Error of failed request: badAlloc (insufficient resources for operation)
Major opcode of failed request: 53 (X_CreatePixmap)
Serial number of failed request: 295
Current serial number in output stream: 296
我的垂直参数目前有251个值,所以我可以看到251*2.3
英寸可能会导致麻烦。我在2.3 * numYparams中添加了因为这些图是重叠的,但是我不知道如何在不改变图中图的排列方式的情况下创建更小的图。对于这些图来说,留在垂直方向的柱子中非常重要。
答案 0 :(得分:1)
您的代码中存在一些错误。修复它们可以让我生成你要求的数字。
# I needed the figsize keyword here
self.fig1 = plt.figure(figsize=(4.6*numXparams,2.3*numYparams))
# You had x and y switched around here
self.gs = gridspec.GridSpec(numYparams,numXparams)
self.gs.update(left=0.03, right=0.97, top=0.9, bottom=0.1, wspace=0.5, hspace=0.5)
# I ran this loop
for i in range(numYparams):
ax = fig1.add_subplot(gs[i, 0]) # note the y coord in the gridspec comes first
ax.text(0.5,0.5,i) # just an identifier
fig1.savefig('column.png',dpi=50) # had to drop the dpi, because you can't have a png that tall!
这是输出数字的顶部和底部:
不可否认,第一个和最后一个子图下面有很多空间,但您可以通过使用图形尺寸或gs.update