gpt4 book ai didi

python - 实时动态绘图

转载 作者:行者123 更新时间:2023-11-28 18:48:29 24 4
gpt4 key购买 nike

我有一个关于从 matplotlib 更新动态散点图的问题。我在 Python 中有以下类

''' PolygonHandler.py - Python source for polygon handling '''
import numpy as np
import matplotlib.pyplot as plt


class PolygonHandler:
# Constructor
def __init__(self):
self.X = []
self.Y = []
self.numberPoints = 0

# Print the polygon
def draw(self):
plt.scatter(self.X,self.Y)
plt.draw()

def update(self):
for i in range(1,self.numberPoints):
self.X[i] += np.random.normal()*0.01
self.Y[i] += np.random.normal()*0.01


# append a point
def add(self,x,y):
self.numberPoints += 1
self.X.append(x)
self.Y.append(y)

此类用于接收信息并将点添加到 PolygonHandler 类的实时循环中。现在为了举例,我想设计如下循环

P = PolygonHandler()
P.add(1,1)
P.add(2,2)
P.add(1,2)
plt.ion()
plt.show()
while (True):
P.draw()
P.update()

我如何告诉解释器绘制散点图,并在更新后删除之前的点?现在,我的绘图绘制了点和它们之前的所有位置。

文森特

非常感谢您的帮助

PS:我遇到的另一个问题是 matplotlib 打开的窗口在我点击它时卡住并停止应答(例如将它移动到我屏幕上的另一个地方),有没有办法防止那个?

最佳答案

这里有一种方法可以使用来自 matplotlib 的动画。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

class PolygonHandler:
# Constructor
def __init__(self):
self.X = []
self.Y = []
self.numberPoints = 0
self.fig , ax = plt.subplots()
self.sc = ax.scatter(self.X,self.Y)
ax.set_xlim(0,3)
ax.set_ylim(0,3)

# Print the polygon
def update(self,_):
for i in range(self.numberPoints):
self.X[i] += np.random.normal()*0.01
self.Y[i] += np.random.normal()*0.01
self.sc.set_offsets(np.column_stack((self.X,self.Y)))
return self.sc,

# append a point
def add(self,x,y):
self.numberPoints += 1
self.X.append(x)
self.Y.append(y)

这样你就可以绘制出你的 3 次随机游走:

P = PolygonHandler()
P.add(1,1)
P.add(2,2)
P.add(1,2)
ani = animation.FuncAnimation(P.fig, P.update, interval=10,blit=False)

关键元素是方法 set_offsets(),它替换了散点图的数据。然后 update() 返回这样的散点对象,让 matplotlib 知道它必须更新。有关由类处理的 matplotlib 动画的另一个来源,请参阅 this matplotlib 示例。

在最后一行中使用 blit=True 动画会更快,但根据您的操作系统,它可能无法正常工作。

关于python - 实时动态绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16787909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com