我正在尝试对Monte Carlo方法进行动画处理,以计算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()

最佳答案

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

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


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

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

关于python - Matlab动画剧情散点图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50279826/

10-12 18:31