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 ORM框架SQLAlchemy学习笔记之安装和简单查询实例
Jun 10 Python
Python的垃圾回收机制深入分析
Jul 16 Python
Python探索之ModelForm代码详解
Oct 26 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
Nov 08 Python
Python操作Redis之设置key的过期时间实例代码
Jan 25 Python
python学习入门细节知识点
Mar 29 Python
python tkinter界面居中显示的方法
Oct 11 Python
python list转置和前后反转的例子
Aug 26 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
Nov 30 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
Jan 03 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
Mar 02 Python
单身狗福利?Python爬取某婚恋网征婚数据
Jun 03 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
workerman结合laravel开发在线聊天应用的示例代码
2018/10/30 PHP
又一个小巧的图片预加载类
2007/05/05 Javascript
JavaScript replace(rgExp,fn)正则替换的用法
2010/03/04 Javascript
基于jquery的网页SELECT下拉框美化代码
2010/10/28 Javascript
说明你的Javascript技术很烂的五个原因
2011/04/26 Javascript
JS格式化数字金额用逗号隔开保留两位小数
2013/10/18 Javascript
nodejs文件操作模块FS(File System)常用函数简明总结
2014/06/05 NodeJs
jQuery实现在textarea指定位置插入字符或表情的方法
2015/03/11 Javascript
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
简介JavaScript中Math.LOG10E属性的使用
2015/06/14 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
js实现添加可信站点、修改activex安全设置,禁用弹出窗口阻止程序
2016/08/17 Javascript
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
2017/03/23 jQuery
解决option标签selected=&quot;selected&quot;属性失效的问题
2017/11/06 Javascript
响应式框架Bootstrap栅格系统的实例
2017/12/19 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
微信小程序BindTap快速连续点击目标页面跳转多次问题处理
2019/04/08 Javascript
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
webpack 动态批量加载文件的实现方法
2020/03/19 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
[38:54]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第一场 11.28
2020/12/01 DOTA
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
Python多进程同步简单实现代码
2016/04/27 Python
Python的语言类型(详解)
2017/06/24 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
vue常用指令代码实例总结
2020/03/16 Python
python requests.get带header
2020/05/05 Python
人力资源管理毕业生自荐信
2013/11/21 职场文书
中西医专业毕业生职业规划书
2014/02/24 职场文书
美国留学经济担保书
2014/05/20 职场文书
服务口号大全
2014/06/11 职场文书
西双版纳导游词
2015/02/03 职场文书
优秀党员先进事迹材料2016
2016/02/29 职场文书
2019最新公司租房合同(例文)
2019/07/18 职场文书
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技