Flask和echarts做可视化图表

2022-04-26 20:28:42 浏览数 (1)

现在是数据的时代,但是一堆数据是不直观的。我们需要可观测性,用图表展现出来,各种大屏可视化,看起来高大上的样子。截图的话,不够灵活,如果在PPT里能用动图展示,会让你的PPT增色不少。 可视化的工具很多,现在python各种库都能可视化,比如matplotlib,pycharts.

今天要说的是echarts可视化。 echarts是百度开源的纯js的可视化,现在是apache开源项目。 可以直接在https://echarts.apache.org/examples/zh/index.html#chart-type-bar下载到各种模型。 安装也比较简单:

从 npm 获取

代码语言:javascript复制
npm install echarts --save

详见在项目中引入 Apache ECharts。

从 CDN 获取

推荐从 jsDelivr 引用 echarts。

从 GitHub 获取

apache/echarts 项目的 release 页面可以找到各个版本的链接。点击下载页面下方 Assets 中的 Source code,解压后 dist 目录下的 echarts.js 即为包含完整 ECharts 功能的文件。

在线定制

如果只想引入部分模块以减少包体积,可以使用 ECharts 在线定制功能。

现在以矩形为例,看Echarts官网文档的教程,下面的代码也是复制教程里的。

代码语言:javascript复制
<head>
    <meta charset="UTF-8">
    <title>Echarts</title>
    <script src="/static/js/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 = {
            title: {
                text: 'ECharts 入门示例'
            },
            tooltip: {},
            legend: {
                data:['销量']
            },
            xAxis: {
                data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
            },
            yAxis: {},
            series: [{
                name: '销量',
                type: 'bar',
                data: [5, 20, 36, 10, 10, 20]
            }]
        };

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

可以看出,上面的代码图表的元素都是写死的。我们改造一下,用flask搭建框架来获取。 先安装flask:

代码语言:javascript复制
pip3 install flask

建一个template/data.html, 下面的代码是从后台读数据,使用json和ajax请求

代码语言:javascript复制
<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <title>Echarts</title>
<!--    <script src="/static/js/echarts.min.js"></script>-->
    <script src="{{ url_for('static', filename='jquery-3.5.1.min.js') }}"></script>
     <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实例
$(function () {
            // 基于准备好的dom,初始化echarts实例
            var myChart = echarts.init(document.getElementById('main'));
            $.ajax({
                url:'/getdata',
                success:function (data) {
                    json_data=JSON.parse(data)

                    console.info(json_data['language'])
                    console.info(json_data['value'])

                    // 指定图表的配置项和数据
                    var option = {
                        title: {
                            text: '学习语言人数统计'
                        },
                        tooltip: {},
                        legend: {
                            data:['销量']
                        },
                        xAxis: {
                            data: json_data['language']
                        },
                        yAxis: {},
                        series: [{
                            name: '销量',
                            type: 'bar',
                            data: json_data['value']
                        }]
                    };
                    // 使用刚指定的配置项和数据显示图表。
                    myChart.setOption(option);

                }
            })
        })
    </script>
</body>
</html>

flask的主函数可以这样写:

代码语言:javascript复制
from flask import Flask
from flask import url_for,render_template
import json
app = Flask(__name__)


@app.route('/')
def my():
    return render_template('data.html')


@app.route('/getdata')
def get_data():
    language = ['python', 'java', 'c', 'c  ', 'c#', 'php']
    value = ['100', '150', '100', '90', '80', '90']
    return json.dumps({'language':language,'value':value},ensure_ascii=False)


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

然后就是需要将echarts.min.js,和jquery.min.js导入到下static。 运行,效果如下:

大工告成,如此简单。 如果想插入PPT,有两种方法,第一种就是插入,加载项,web地址。 第二种就是插入gif图片。 这样就一个动态的PPT就做出来了,如果想要其他图片,相应的改改就行了,还是很好用的。 如果想更炫酷,可以去git上去找些模板。

0 人点赞