Python绘图API:如何通过flask API公开科学Python绘图?

Python绘图API:如何通过flask API公开科学Python绘图?,python,matplotlib,flask,Python,Matplotlib,Flask,我需要从烧瓶表单的数据创建一个绘图。 我已经试着在下一个网页中展示matplotlib散点图,你怎么能看到我不知道怎么做,因为没有人能解释我 所以,你能给我一些建议,如何在网页中分散使用python数据吗。 如果它是在一个网页与形式更好 我还检查了matplotlib的工作速度太慢了kek 已添加 但在填写表格后,如何在下一页显示图像 我想我需要使用另一个烧瓶。func如下: 从flask导入flask,呈现模板,url,重定向,发送文件,做出响应 从表单导入AAForm 从“创建打印导入绘图

我需要从烧瓶表单的数据创建一个绘图。 我已经试着在下一个网页中展示matplotlib散点图,你怎么能看到我不知道怎么做,因为没有人能解释我

所以,你能给我一些建议,如何在网页中分散使用python数据吗。 如果它是在一个网页与形式更好

我还检查了matplotlib的工作速度太慢了kek

已添加

但在填写表格后,如何在下一页显示图像

我想我需要使用另一个烧瓶。func如下:


从flask导入flask,呈现模板,url,重定向,发送文件,做出响应
从表单导入AAForm
从“创建打印导入绘图仪”
导入操作系统
app=烧瓶(名称)
SECRET_KEY=os.uradom(32)
app.config['SECRET\u KEY']=SECRET\u KEY
@app.route('/',方法=['GET','POST'])
def index():
form=AAForm()
if form.validate_on_submit():
返回呈现模板('img.html',url='/kek')
返回呈现模板('index.html',form=form)
@app.route('/kek',methods=['GET','POST'])
def img(表格):
bytes_obj=绘图仪(form.uniprot_id.data,['K','R','H'])
返回发送文件(字节),
附件_filename='plot.png',
mimetype='image/png')
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app.run(debug=True)
这是:


但我不明白如何将form.data发送到img.func

绘图数据 这里一种可能的方法是构建一个返回数据的API,并让应用程序前端使用或多或少复杂的javascript图表库呈现数据

我们需要什么组件:

数据集:来自scikit学习的乳腺癌数据集示例

A图:首先从seaborn获得一个简单的相关图

API:使用flask创建简单的API

首先加载数据并进行绘图

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import io
from sklearn.datasets import load_breast_cancer
def do_plot():
    # Loading 
    data = load_breast_cancer()
    breast_cancer_df = pd.DataFrame(data['data'])
    breast_cancer_df.columns = data['feature_names']
    breast_cancer_df['target'] = data['target']
    breast_cancer_df['diagnosis'] = [data['target_names'][x] for x in data['target']]
    feature_names= data['feature_names']

    corr = breast_cancer_df[list(feature_names)].corr(method='pearson')

    f, ax = plt.subplots(figsize=(11, 9))
    cmap = sns.diverging_palette(220, 10, as_cmap=True)
    mask = np.zeros_like(corr, dtype=np.bool)
    mask[np.triu_indices_from(mask)] = True

    sns.heatmap(corr, mask=mask, cmap=cmap, vmax=.3, center=0,
                square=True, linewidths=.5, cbar_kws={"shrink": .5})

    # here is the trick save your figure into a bytes object and you can #afterwards expose it via flas
    bytes_image = io.BytesIO()
    plt.savefig(bytes_image, format='png')
    bytes_image.seek(0)
    return bytes_image
这将导致下图:

现在通过烧瓶API公开此BytesIO对象

from flask import Flask, send_file, make_response, 
from plot import do_plot
app = Flask(__name__)

@app.route('/plots/breast_cancer_data/correlation_matrix', methods=['GET'])
def correlation_matrix():
    bytes_obj = do_plot()

    return send_file(bytes_obj,
                     attachment_filename='plot.png',
                     mimetype='image/png')

if __name__ == '__main__':
    app.run(debug=False)
如果服务器在本地主机上运行,则映像将在下可用

为了让最终用户访问绘图,请将数据集成到HTML网站中。您只需将数据包含在html正文中,它就可以开箱即用


参考:

它是否也适用于您的数据集。如果你需要帮助,请告诉我(哦,对不起)我的意思是“请回答编辑后的问题”,你可以在“添加”好的,对不起,但这也会帮助其他人之后开始阅读。就让它为人民服务吧。在“添加”之后阅读,你想让我为这个问题创建另一个特别的问题吗?