我正在尝试在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,'exec'),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
答案 0 :(得分:1)
您无法在控制台中使用交互式更多(ion
)。不幸的是,问题并不是很清楚你想要什么;但是我们假设您要显示一个带有动画图的窗口。一个简单的方法是在IPython控制台之外运行脚本。在spyder中,您将转到运行/配置(或按F6)并选择“在新的专用Python控制台中执行”。
现在脚本本身的问题是你首先调用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()