我正在尝试对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/