我正在尝试动画蒙特卡罗方法来计算PI,但我有一个问题,在绘制一个情节之后它会消失,字面意思是它会被其他位置的新情节重新设定。
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.animation import FuncAnimation
fig = plt.figure()
plt.xlim(0, 1)
plt.ylim(0, 1)
graph, = plt.plot([], [], 'o')
tries = 1000
inside = 0
dot = np.random.rand(tries, 2)
def animate(i):
graph.set_data(dot[i][0], dot[i][1])
for i in range(0, tries):
if np.sqrt(dot[i][0]**2 + dot[i][1]**2) < 1:
inside += 1
animate(i)
else:
animate(i)
print (float(inside) / tries) * 4
ani = FuncAnimation(fig, animate, frames=20, interval=200)
plt.show()
答案 0 :(得分:0)
每次迭代时您的绘图被新单点替换的原因是animate
函数中的行。您已创建Line2D
对象,并且每次都将其值设置为单个点。解决此问题的一种方法是对此行进行简单更改,该函数变为:
def animate(i):
graph.set_data((dot[:i,0],), (dot[:i,1],))
由于dot
变量的结构,索引前的冒号会导致各列中的所有元素行0到i-1被发送到Line2D
对象。因此,在每次迭代中,您将使用包含一个点的新集替换先前的点集。
如果这不是你想要的,请通过评论告诉我。