我知道这些问题:(A),(B)和(C)-所有这些都解决了我的部分问题。
我也读过Animations Cookbook
然而,我的问题似乎没有在上述任何一项中得到解决。
我希望在优化器运行时绘制优化器返回的目标函数。我不知道优化器将运行多少次迭代。独立于如何获得包含目标函数的数组,这个问题可以在这个最小的示例中隔离:import numpy as np
import matplotlib.pyplot as plt
SIZE = 50
R1 = 0.5
R2 = 0.75
plt.ion()
fig = plt.figure()
ax = fig.add_subplot(111)
fig.canvas.set_window_title('broken spiral')
for i in range(0, SIZE):
A.append(R1 * i * np.sin(i))
B.append(R2 * i * np.cos(i))
line1, = ax.plot(A,'-k',label='black')
line2, = ax.plot(B,'-r',label='red')
legend = ax.legend(loc=0)
plt.draw()
plt.savefig('test_broken_spiral.png')
这里的绘图只是“伪”更新的。真正发生的是,每次迭代都会生成一个新的A和B行,与原始行重叠,但也会生成一个新的图例项。经过50次迭代,我有100行和100个图例项。
接下来我试了一下:for i in range(0, SIZE):
A.append(R1 * i * np.sin(i))
B.append(R2 * i * np.cos(i))
if i == 0:
line1, = ax.plot(A,'-k',label='black')
line2, = ax.plot(B,'-r',label='red')
legend = ax.legend(loc=0)
plt.draw()
else:
line1.set_ydata(A)
line2.set_ydata(B)
plt.draw()
plt.savefig('test_broken_spiral.png')
不幸的是,这个情节把轴心完全弄乱了。
我把if i == 0语句放进去,因为我不知道预先迭代的次数(是的,在本例中我知道,但在这个目标应用程序中不知道),并且以某种方式必须“初始化”绘图和图例。
我的问题可以总结如下:
1)如何更新我的绘图?如果我运行优化器10000次迭代,我不希望在我的绘图(文件大小)中有10000条上覆线。
2)在哪里放置legend命令?
我正在运行python 2.6.6和matplotlib 0.99.1.1
编辑:
This似乎是一个类似的问题,同样的问题也没有答案。