vlambda博客
学习文章列表

Flask和echarts做可视化图表

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

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

从 npm 获取

npm install echarts --save

详见在项目中引入 Apache ECharts。

从 CDN 获取

推荐从 jsDelivr 引用 echarts。

从 GitHub 获取

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

在线定制

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

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

<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:

pip3 install flask

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

<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>Echarts</title>
<!-- <script ></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的主函数可以这样写:

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。
运行,效果如下: