Flask使用Pyecharts在单个页面展示多个图表的方法


Posted in Python onAugust 05, 2019

在Flask页面展示echarts,主要有两种方法:

方法1、原生echarts方法

自己在前端引入echarts.js文件、自己创建div、自己初始化echarts对象、自己从官网复制并且配置图表、自己给echarts对象设置配置项实现绘制,这种方法的缺点是配置项都是js的形式比较繁琐,对于后端开发人员来说有点过于参与前端js部分的配置开发;

这种方式参照echarts官网的方式,其实跟flask没有多大关系,php/java不同后端语言都一样,地址

方法2:使用pyecharts

pyecharts主要是做了一件事情,把js的配置option,完全抽离使用Python代码配置,把js的数据结构使用python的代码结构实现,让后端开发只需要配置数据就能搞定图表,真的很像matplotlib,当然echarts的强大使得pyecharts更强大;

但是这里真的要吐槽pyecharts,因为它包含多种输出图表结果的方式,没有一种是能够和flask完美配合的:

  • render()方法:默认会在当前目录生成 render.html 文件;这是什么鬼,什么场景会用到这种方式,竟然是默认的方式?真是怪异;
  • render()方法传入路径参数:传入路径参数,如 bar.render(“mycharts.html”),这种方法好一点,可以设定文件路径,但是为毛要输出一个HTML,另外一点,我做一个网页,难道这个网页上除了这个图表没有其他数据和展示了?只有一个大大的echarts图表?
  • render_notebook()方法:这个方法能用在notebook中,这个我不吐槽,因为如果使用notebook,这个方法很好用,但是我要用于flask网页展示;
  • render_embed()方法:来自pyecharts的flask一章中的Markup(c.render_embed()),我估计作者根本没写过flask代码,不然为毛flask网页中只能展示一个echarts图表,我其他的数据展示,怎么用这个方法设置?我试图把render_embed()的结果传递给flask模板,结果发现这个函数的返回是一个整个HTML;
  • chart.dump_options()方法:这个方法是唯一一个我觉得能和flask配合不错的方法,能够实现一个flask网页中绘制很多个图表;然而却依然需要自己引入echarts.js文件、自己设定div、自己初始化echarts对象、自己给echarts对象设置图表配置,唯一简化的就是图表配置是来自于python服务端;

最后给出使用chart.dump_options()方法给一个flask网页配置多个图表的方法代码:

Python代码:

@app.route("/show_pyecharts")
def show_pyecharts():
  bar = (
    Bar()
      .add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
      .add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
  )
  # print(bar.render_embed())
  # print(bar.dump_options())
  return render_template(
    "show_pyecharts.html",
    bar_data=bar.dump_options()
  )

Flask模板代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="/static/echarts.min.js"></script>
</head>
<body>
<h1>柱状图</h1>
<div>
  <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
  <div id="main" style="width: 600px;height:400px;"></div>
  <script type="text/javascript">
    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById('main'));
    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption({{ bar_data | safe }});
  </script>
 
  <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
  <div id="main2" style="width: 600px;height:400px;"></div>
  <script type="text/javascript">
    // 基于准备好的dom,初始化echarts实例
    var myChart2 = echarts.init(document.getElementById('main2'));
 
    // 指定图表的配置项和数据
    var option2 = {{ bar_data | safe }};
 
    // 使用刚指定的配置项和数据显示图表。
    myChart2.setOption(option2);
  </script>
</div>
 
</body>
</html>

展示输出:

Flask使用Pyecharts在单个页面展示多个图表的方法

总结

以上所述是小编给大家介绍的Flask使用Pyecharts在单个页面展示多个图表的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python冒泡排序简单实现方法
Jul 09 Python
在Django的URLconf中进行函数导入的方法
Jul 18 Python
Python批量创建迅雷任务及创建多个文件
Feb 13 Python
详解python eval函数的妙用
Nov 16 Python
分析python动态规划的递归、非递归实现
Mar 04 Python
导入tensorflow时报错:cannot import name 'abs'的解决
Oct 10 Python
解决Python数据可视化中文部分显示方块问题
May 16 Python
python调用私有属性的方法总结
Jul 24 Python
python 多线程死锁问题的解决方案
Aug 25 Python
Python字符串及文本模式方法详解
Sep 10 Python
Python eval函数原理及用法解析
Nov 14 Python
解决virtualenv -p python3 venv报错的问题
Feb 05 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
Aug 05 #Python
用django设置session过期时间的方法解析
Aug 05 #Python
基于python 微信小程序之获取已存在模板消息列表
Aug 05 #Python
Python中typing模块与类型注解的使用方法
Aug 05 #Python
Python及Pycharm安装方法图文教程
Aug 05 #Python
python redis连接 有序集合去重的代码
Aug 04 #Python
Django中URL的参数传递的实现
Aug 04 #Python
You might like
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
php中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
PHP进程同步代码实例
2015/02/12 PHP
PHP安全上传图片的方法
2015/03/21 PHP
php传值赋值和传地址赋值用法实例分析
2015/06/20 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
使用JavaScript实现ajax的实例代码
2016/05/11 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
js + css实现标签内容切换功能(实例讲解)
2017/10/09 Javascript
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
使用JS监听键盘按下事件(keydown event)
2019/11/07 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
2020/07/28 Javascript
Javascript异步流程控制之串行执行详解
2020/09/27 Javascript
uniapp电商小程序实现订单30分钟倒计时
2020/11/01 Javascript
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
[57:38]2018DOTA2亚洲邀请赛3月30日 小组赛A组 OpTic VS OG
2018/03/31 DOTA
Python比较两个图片相似度的方法
2015/03/13 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
2019/01/23 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
HTML5中Localstorage的使用教程
2015/07/09 HTML / CSS
HTML5 Canvas实现烟花绽放特效
2016/03/02 HTML / CSS
HTML5中form如何关闭自动完成功能的方法
2018/07/02 HTML / CSS
美国著名的婴儿学步鞋老品牌:Robeez
2016/08/20 全球购物
德国咖啡批发商:Coffeefair
2019/08/26 全球购物
德国家具折扣店:POCO
2020/02/28 全球购物
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
SQL面试题
2013/12/09 面试题
会计师事务所审计实习自我鉴定
2013/09/20 职场文书
运动会口号16字
2014/06/07 职场文书
Python数据结构之队列详解
2022/03/21 Python
Python中非常使用的6种基本变量的操作与技巧
2022/03/22 Python