tight_layout throw error:ValueError:max()arg是一个空序列

时间:2017-03-17 18:32:12

标签: python matplotlib spyder

我正在尝试在python中使用plt.ion()来更新数字:

import numpy as np
import numpy.matlib
import matplotlib.pyplot as plt

plt.ion()

plt.close('all')

tmax =30
W = np.random.rand(6,100)        

fig, ax = plt.subplots(2,3)     
plt.show()

for t in range (1, tmax):
    W = t * W        
    for ii in range(2):
        for jj in range(3):      
            output = W[3*ii+jj,:].reshape((10,10),order = 'F')
            ax[ii,jj].clear()
            ax[ii,jj].imshow(output, interpolation='nearest')                
    plt.tight_layout()
    plt.draw()
    plt.pause(0.1)


plt.waitforbuttonpress()

运行此操作将在控制台中显示空白数字并抛出错误:

  

追踪(最近一次呼叫最后一次):

     

文件“”,第1行,in       runfile('/ Users / Alessi / Documents / Spyder / 3240ass / comp.py',wdir ='/ Users / Alessi / Documents / Spyder / 3240ass')

     

文件   “/Users/Alessi/anaconda/lib/python3.5/site-packages/spyder/utils/site/sitecustomize.py”   第866行,在runfile中       execfile(filename,namespace)

     

文件   “/Users/Alessi/anaconda/lib/python3.5/site-packages/spyder/utils/site/sitecustomize.py”   第102行,在execfile中       exec(compile(f.read(),filename,'e​​xec'),namespace)

     

文件“/Users/Alessi/Documents/Spyder/3240ass/comp.py”,第27行,在          plt.tight_layout()

     

文件   “/Users/Alessi/anaconda/lib/python3.5/site-packages/matplotlib/pyplot.py”   第1387行,在tight_layout       fig.tight_layout(pad = pad,h_pad = h_pad,w_pad = w_pad,rect = rect)

     

文件   “/Users/Alessi/anaconda/lib/python3.5/site-packages/matplotlib/figure.py”   第1752行,在tight_layout中       RECT = RECT)

     

文件   “/Users/Alessi/anaconda/lib/python3.5/site-packages/matplotlib/tight_layout.py”   第322行,在get_tight_layout_figure中       max_nrows = max(nrows_list)

     

ValueError:max()arg是一个空序列

使用anaconda spyder

1 个答案:

答案 0 :(得分:1)

您无法在控制台中使用交互式更多(ion)。不幸的是,问题并不是很清楚你想要什么;但是我们假设您要显示一个带有动画图的窗口。一个简单的方法是在IPython控制台之外运行脚本。在spyder中,您将转到运行/配置(或按F6)并选择“在新的专用Python控制台中执行”。

enter image description here

现在脚本本身的问题是你首先调用plt.show(),它显示空的子图。这必须删除。

显示动画的版本将是

import numpy as np
import matplotlib.pyplot as plt

plt.close('all')
plt.ion()

tmax =30

fig, ax = plt.subplots(2,3)     

for t in range (1, tmax):
    W = np.random.rand(6,100)      
    for ii in range(2):
        for jj in range(3):      
            output = W[3*ii+jj,:].reshape((10,10),order = 'F')
            ax[ii,jj].clear()
            ax[ii,jj].imshow(output, interpolation='nearest')
    if t == 1:                
        plt.tight_layout()
    plt.draw()
    plt.pause(0.1)


plt.waitforbuttonpress()