我知道这些问题:(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')
这里的情节只是“伪”更新。真正发生的是,对于每次迭代,都会生成一个新行 for A
and 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.)我如何更新我的情节?如果我将优化器运行 10,000 次迭代,我不希望我的绘图(文件大小)中有 10,000 条覆盖线。
2.) 我在哪里放置legend
命令?
我正在运行 python 2.6.6 和 matplotlib 0.99.1.1
编辑:
这似乎是一个类似的问题,同样没有答案的问题。