我正在努力尝试使用烧瓶通过http POST来绘制我想要接收的数据。 我的代码由两部分组成,即烧瓶应用程序的启动脚本和负责绘图的LivePlot类。
LivePlot类,我尝试了三次尝试:
import matplotlib
matplotlib.use('Qt5Agg')
import matplotlib.pyplot as plt
class LivePlot(object):
""" A live plotting class based on matplotlib """
def __init__(self):
self._x = []
self._y = []
# First attempt
self._fig = plt.gcf()
self._fig.show()
self._fig.canvas.draw()
# Second attempt
#plt.ion()
#plt.plot([0, 1])
# Third attempt
#plt.show()
def add(self, x, y):
""" Add point to live plot """
self._x.append(x)
self._y.append(y)
self._refresh()
def _refresh(self):
plt.plot(self._x, self._y, color='b', marker='o')
plt.xlim([min(self._x), max(self._x)])
plt.ylim([min(self._y), max(self._y)])
self._fig.canvas.draw()
烧瓶启动脚本:
import json
from flask import Flask, request
from flask_restplus import Api, Resource
from liveplot import LivePlot
APP = Flask(__name__)
API = Api(APP)
LIVE_PLOT = None
class LivePlotData(Resource):
def post(self):
"""Add data point"""
req = json.loads(request.data)
LIVE_PLOT.add(float(req["x"]), float(req["y"]))
return True
API.add_resource(LivePlotData, '/data')
if __name__ == '__main__':
# Init LivePlot
LIVE_PLOT = LivePlot()
APP.run(debug=True,
host=127.0.0.1,
port=5000,
use_reloader=False,
threaded=True)
当我尝试运行第一次或第二次尝试时,我看到我的平铺窗口管理器正在分割屏幕,但没有窗口出现。 烧瓶应用程序正在运行,我可以向列表中添加新值,但图表不会出现。
当我运行第三次尝试时,会出现该图,但由于构造函数中的plt.show()命令阻止了脚本,因此应用程序无法启动。
顺便说一下。以下代码完美无缺:
import matplotlib.animation as animation
import matplotlib.pyplot as plt
fig = plt.gcf()
fig.show()
fig.canvas.draw()
x = []
y = []
for ix in range(0, 10):
x.append(ix)
y.append(int(input()))
plt.plot(x, y, color='b', marker='o')
plt.xlim([min(x), max(x)])
plt.ylim([min(y), max(y)])
fig.canvas.draw()
正如我上面提到的,我尝试了几个不同的代码片段,但是它们似乎都不适用于我。也许我错过了plt通话的完美组合,但此刻我被卡住了。
也许有人遇到了类似的问题,可以帮助我。 提前谢谢!
编辑:在工作示例中使用for循环替换True循环