日常工作中我们可能需要临时把数据分享给运营或者产品,如果购买或者开发一个新的框架成本比较高,那么我们可以用Flask做一个简单的数据展示进行分享。

flask 是python web开发的微框架,Echarts酷炫的功能主要是javascript起作用,将两者结合起来,发挥的作用更大。

一、安装Pycharm

Pycharm是当下比较流行的python的IDE,下面可以直接创建flask项目

首先到官网进行下载

安装可以选择到网上找可以用的激活码

二、创建Flask项目

pycharm数据可视化大屏展示 pycharm显示可视化图表_数据

File - new project里面直接创建一个Flask

创建完成后的目录

pycharm数据可视化大屏展示 pycharm显示可视化图表_html_02

三、第一个项目

写一个最简单的程序

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():

	return 'Hello World!'

if __name__ == '__main__':
	app.run()

下面会出现如下结果

pycharm数据可视化大屏展示 pycharm显示可视化图表_flask_03

说明运行成功

打开里面的网址便会出现

pycharm数据可视化大屏展示 pycharm显示可视化图表_数据_04

四、创建第一个图表

首先要先pip install pyecharts

直接在pycharm里面打开终端进行下载

from flask import Flask
from jinja2 import Markup
from pyecharts import options as opts
from pyecharts.charts import Bar
app = Flask(__name__, static_folder="templates")
def bar_base() -> Bar:
  c = (
    Bar()
      .add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
      .add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
      .add_yaxis("商家B", [15, 25, 16, 55, 48, 8])
      .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="AB数据对比"))
  )
  return c
@app.route("/")
def index():
  c = bar_base()
  return Markup(c.render_embed())
if __name__ == "__main__":
  app.run()

pycharm数据可视化大屏展示 pycharm显示可视化图表_flask_05

五、前后端分离

前后端分离可以更好的把图表精细化处理

我们需要下载一个文件echarts.min.js

pycharm数据可视化大屏展示 pycharm显示可视化图表_flask_06

选择在线定制,把下载的文件放在static里面

pycharm数据可视化大屏展示 pycharm显示可视化图表_pycharm数据可视化大屏展示_07

在templates里面建立一个html文件

pycharm数据可视化大屏展示 pycharm显示可视化图表_pycharm数据可视化大屏展示_08

app.py里面

from flask import *
from pyecharts import options as opts
from pyecharts.charts import Bar

app = Flask(__name__)

@app.route('/')
def show_charts():
    bar = (
        Bar()
            .add_xaxis(["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"])
            .add_yaxis("商家A",[5, 20, 36, 10, 10, 20])
            .add_yaxis("商家B", [15, 25, 16, 55, 48, 8])

        .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="AB数据对比"))
    )


    return render_template('show_charts.html',
                           bar_options=bar.dump_options())

if __name__ == "__main__":

    app.run(debug = True)

show_charts.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ECharts</title>
    <!-- 引入 echarts.js 这里使用flask的url_for-->
    <script src="{{ url_for('static', filename='echarts.min.js') }}"></script>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));

        // 指定图表的配置项和数据
        var option ={{ bar_options | safe }};

        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    </script>
</body>
</html>

六、多图展示

pycharm数据可视化大屏展示 pycharm显示可视化图表_pycharm数据可视化大屏展示_09

代码:

from flask import *
from pyecharts import options as opts
from pyecharts.charts import Bar,Pie

app = Flask(__name__)

@app.route('/')
def show_charts():
    bar = (
        Bar()
            .add_xaxis(["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"])
            .add_yaxis("商家A",[5, 20, 36, 10, 10, 20])
            .add_yaxis("商家B", [15, 25, 16, 55, 48, 8])

        .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="AB数据对比"))
    )


    pie = (
      Pie()
        .add("", [("商家A", 100), ("商家B", 88), ("商家C", 166)])
        .set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本示例"))
        .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))

    )

    return render_template('show_charts.html',
                           bar_options=bar.dump_options(),
                           pie_options=pie.dump_options())

if __name__ == "__main__":

    app.run(debug = True)

html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ECharts</title>
    <!-- 引入 echarts.js 这里使用flask的url_for-->
    <script src="{{ url_for('static', filename='echarts.min.js') }}"></script>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <h1>柱形图</h1>
    <div id="bar" style="width: 600px;height:400px;"></div>
    <h1>饼图</h1>
    <div id="pie" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var barChart = echarts.init(document.getElementById('bar'));
        var pieChart = echarts.init(document.getElementById('pie'));


        // 使用刚指定的配置项和数据显示图表。
        barChart.setOption({{ bar_options | safe }});
        pieChart.setOption({{ pie_options | safe }});
    </script>
</body>
</html>

七、远程访问

远程服务器部署需指定 host='0.0.0.0' , 其他机器才能正常访问远程服务,即如下方式

app.run(host='0.0.0.0',port=8000)

pycharm数据可视化大屏展示 pycharm显示可视化图表_html_10

 

指定host后远程服务可被其他任何机器访问。

八、问题实例

如果在终端运行出现如下问题

Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.

其实就是flask未使用 WSGI 启动,所以使用wsgi启动就行了

 

from gevent import pywsgi
 
if __name__ == '__main__':
    server = pywsgi.WSGIServer(('0.0.0.0', 8000), app)
    server.serve_forever()