matplob动画情节散点图

时间:2018-05-10 19:02:23

标签: python animation matplotlib

我正在尝试动画蒙特卡罗方法来计算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()

1 个答案:

答案 0 :(得分:0)

每次迭代时您的绘图被新单点替换的原因是animate函数中的行。您已创建Line2D对象,并且每次都将其值设置为单个点。解决此问题的一种方法是对此行进行简单更改,该函数变为:

def animate(i):
    graph.set_data((dot[:i,0],), (dot[:i,1],))

由于dot变量的结构,索引前的冒号会导致各列中的所有元素行0到i-1被发送到Line2D对象。因此,在每次迭代中,您将使用包含一个点的新集替换先前的点集。

如果这不是你想要的,请通过评论告诉我。