gpt4 book ai didi

python - 使用 matplotlib 进行实时绘图

转载 作者:太空宇宙 更新时间:2023-11-03 21:22:05 24 4
gpt4 key购买 nike

我正在尝试使用 matplotlib 实时绘制数据。到目前为止,我只成功地显示了一个静态图形窗口,这让我自己感到沮丧。我根据这里的其他答案尝试了许多小的更改,但似乎都不起作用。我的代码如下所示。如有任何帮助,我们将不胜感激。

import matplotlib.pyplot as plt
import numpy as np

class Plotter():
def __init__(self):
self.error = []
self.fig, self.ax = plt.subplots()
self.line, = self.ax.plot(range(len(self.error)), self.error)

def start_plot(self):
plt.ion()


def end_plot(self):
self.error = []

def update(self, worker):
self.error.append(worker.GetMetricValue())
self.line.set_ydata(self.error)
return self.line

def update_plot(self, worker):
self.error.append(worker.Get_metric_value())
self.ax.set_ylim(np.min(self.error)*1.1, (np.max(self.error)+0.1)*1.1)
self.line.set_ydata(self.error)
self.line.set_xdata(range(len(self.error)))
self.fig.canvas.draw()
plt.pause(0.1)
#self.fig.canvas.flush_events()

def get_error(self):
return self.error



class WorkerClass():
def __init__(self):
pass

def Get_metric_value(self):
return np.random.rand()


def main():
worker = WorkerClass()
pltr = Plotter()
pltr.start_plot()
for i in range(10):
print("iteration {}".format(i))
pltr.update_plot(worker)


if __name__ == '__main__':
main()

最佳答案

这是代码的更正版本。我建议使用 FuncAnimation 来制作动画,因为它更稳定并且在图形的事件循环内运行。

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

class Plotter():
def __init__(self):
self.worker = WorkerClass()
self.error = []
self.fig, self.ax = plt.subplots()
self.line, = self.ax.plot(range(len(self.error)), self.error)

def start_plot(self):
self.ani = FuncAnimation(self.fig, self.update_plot, frames=10,
interval=100, repeat=False)
plt.show()

def end_plot(self):
self.error = []

def update_plot(self, i):
self.error.append(self.worker.Get_metric_value())
self.line.set_data(range(len(self.error)), self.error)
self.ax.relim()
self.ax.autoscale_view()

def get_error(self):
return self.error


class WorkerClass():
def __init__(self):
pass

def Get_metric_value(self):
return np.random.rand()


def main():

pltr = Plotter()
pltr.start_plot()

if __name__ == '__main__':
main()

关于python - 使用 matplotlib 进行实时绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54163631/

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