通过Flask提供的Holoviews DynamicMap绘制Pandas DataFrame列的图表

时间:2018-12-10 10:27:53

标签: python pandas flask holoviews

this tutorial之后,我试图使用Holoviews而非Bokeh(here作为CSV文件可用的示例数据)来可视化数据集,并使用Flask来提供结果。我决定使用Flask而不是Bokeh Server,因为我正在使用前者构建更大的工作流。

我的代码如下:

from flask import Flask, render_template, request
import numpy as np
import pandas as pd
from datetime import datetime
from bokeh.embed import components
from bokeh.io import curdoc
import holoviews as hv
hv.extension("bokeh")

app = Flask(__name__)

renderer = hv.renderer('bokeh')
infile = "./uploads/test.csv"

def loadRegionData(regionProperty, **kwargs):
    df = pd.read_csv(infile, parse_dates=['Datetime'])
    df1 = df[regionProperty]
    df = pd.concat([df['Datetime'],df1], axis=1)

    return hv.Curve(df)

colNames = ((pd.read_csv(infile, nrows=1)).drop(['Datetime'], axis=1)).columns.values

dmap = hv.DynamicMap(loadRegionData, kdims='RegionProperty').redim.values(RegionProperty=colNames)

hvplot = renderer.get_plot(dmap)
plot = hvplot.state
plot.name = 'plot'
curdoc().add_root(plot)

@app.route("/")
def index():
    # Embed plot into HTML via Flask Render
    script, div = components(plot)
    return render_template("index.html", script=script, div=div)

if __name__ == '__main__':
    app.run(port=5000, debug=True)

我遇到了以下(不相关的问题)

  1. 当我使用Flask进行部署时,没有显示用于选择列的下拉列表。我怀疑这是因为我没有将index()函数中的正确变量返回/引用到我的index.html中:

<html>
<head>
    <link
        href="http://cdn.pydata.org/bokeh/release/bokeh-1.0.2.min.css"
        rel="stylesheet" type="text/css">
    <link
        href="http://cdn.pydata.org/bokeh/release/bokeh-widgets-1.0.2.min.css"
        rel="stylesheet" type="text/css">

    <script src="http://cdn.pydata.org/bokeh/release/bokeh-1.0.2.min.js"></script>
    <script src="http://cdn.pydata.org/bokeh/release/bokeh-widgets-1.0.2.min.js"></script>

</head>
<body>
    <h1>Holoview test</h1>
    {{ script|safe }}
    {{ div|safe }}
</body>
</html>

如何让Flask同时显示下拉选择器?

  1. 当我使用Bokeh Server测试此应用程序时发现的一个不相关的问题,也可能在Flask实施中出现,它是刻度不会根据我选择的列进行动态调整。也许这可以作为SO上的一个单独问题来解决,但我想现在将其包括在这里,以使事情保持一致。

0 个答案:

没有答案