这两天琢磨了一下pyecharts这个库,自己总结了一些内容,具体如下:
大多数人在做用python库做数据分析的时候,都在用jupyter,用这个工具是没有错,而且非常方便就可以即时的显示数据,这个确实优秀。但是如果有这样的一个需求:是用Django做个数据分析类的可视化大屏BI系统,那还会像jupyter那样两人愉快吗?
我在查看了很多资料,有在Django中使用pandas/numpy/matplotlib来做这件事情的,但是我自己本身也不太懂那些繁琐的程序,我还需要继续提升“键魂”吧。
首先我查看了pyecharts的中文文档:http://pyecharts.org/#/zh-cn/intro
在看文档的时候,我看到了令人欣喜的的地方:可轻松集成至 Flask,Django 等主流 Web 框架
然后我迫不及待的查看类目里面的内容。
我先模仿者敲了前两个类别的代码:在模板中渲染和前后端分离这两个类目,后面两个动态的没有过多的研究,因为在看文档的时候,好多参数都记不住什么意思,只能前后来回的翻看。当我把两个小类目实现之后,我开始思考当前的需求:在一个页面中同时渲染出多个图表,我看到的这两个小类别都是只渲染了一个图表,于是我又疯狂的搜集资料,最后还是回到了文档里面来。
于是让人欣喜的地方来了:组合图表,目前只有四种组合图表的样式,而我当前需要的是平铺在页面上的,所以我着重的看前两个小类目,首先我模仿着第一种Grid在Django中实现了上下表,左右表,多Y轴表(我并不需要K线,就没有研究),做完这些之后,我就想着如何才能把上面这几种表综合起来呢?尽管我做了很多种方式的尝试,但还是不行,好像是覆盖掉了还是怎么回事,反正是乱套了,没有按照平铺的方式来显示图表,于是我又研究Page这个类,希望这个类能实现我想要的功能吧。在尝试了几次之后,发现同样的方法在页面上什么都渲染不出来,我不清楚到底是哪里出了问题,于是我去查看Page的源码。我仔细查看之后,发现了一些原因:

"""
`Page` A container object to present multiple charts vertically in a single page
"""
# 大概意思就是在一个页面显示多种图表吧def render(self,path: str = "render.html",template_name: str = "simple_page.html",env: types.Optional[Environment] = None,**kwargs,) -> str:self._prepare_render()return engine.render(self, path, template_name, env, **kwargs)
# 下面还有两种render,有源码我就不复制了

大概这种情况就是:它只能渲染到指定的页面上面吧,那这不就是和Django没什么关系了吗,那我要怎么传参之类的呢?于是我只能放弃这个类
兜兜转转一圈,最后又回到了Grid类,

"""`Gird` Drawing grid in rectangular coordinate. In a single grid,at most two X and Y axes each is allowed. Line chart, bar chart,and scatter chart (bubble chart) can be drawn in grid.
"""

但是表格类显示的图标又非常的有限,很多精美的图标又无法显示,鱼和熊掌不可兼得啊,总之能显示普通的多图表也行啊,于是我又开始查看文档里面的各种参数,反反复复不断的尝试,终于多图表出现了:

这完全是在Django中使用pyecharts来实现的,数据都是原生的模拟数据,至于如何灵活的使用pandas.numpy来给定参数,我觉得是传过来列表就好了,因为Faker.values()就是一个列表,可以用pandas的tolist功能吧,具体我还没有去实践过,还有如何在图标中添加十字虚线的提示等,只自学了两天,很多参数还得慢慢领悟。下面附上代码,让迷茫的小伙伴重新找到方向。

def grid_vertical() -> Grid:    # 垂直网格bar = (Bar().add_xaxis(Faker.choose()).add_yaxis("商家A", Faker.values()).add_yaxis("商家B", Faker.values()).set_global_opts(title_opts=opts.TitleOpts(title="Grid-Bar"),legend_opts=opts.LegendOpts(pos_left="20%")))line = (Line().add_xaxis(Faker.choose()).add_yaxis("商家A", Faker.values()).add_yaxis("商家B", Faker.values()).set_global_opts(title_opts=opts.TitleOpts(title="Grid-Line", pos_top="48%"),legend_opts=opts.LegendOpts(pos_top="48%", pos_left="20%")))scatter = (Scatter().add_xaxis(Faker.choose()).add_yaxis("商家A", Faker.values()).add_yaxis("商家B", Faker.values()).set_global_opts(title_opts=opts.TitleOpts(title="Grid-Scatter", pos_right="5%"),legend_opts=opts.LegendOpts(pos_right="25%"),))line2 = (Line().add_xaxis(Faker.choose()).add_yaxis("商家A", Faker.values()).add_yaxis("商家B", Faker.values()).set_global_opts(title_opts=opts.TitleOpts(title="Grid-Line2", pos_right="5%", pos_top="48%"),legend_opts=opts.LegendOpts(pos_right="25%", pos_top="48%"),))grid = (Grid()      # 上下图和左右图.add(chart=bar, grid_opts=opts.GridOpts(pos_bottom="60%", width="38%")).add(chart=line, grid_opts=opts.GridOpts(pos_top="60%", width="38%")).add(chart=scatter, grid_opts=opts.GridOpts(pos_left="55%", pos_bottom="60%")).add(chart=line2, grid_opts=opts.GridOpts(pos_left="55%", pos_top="60%"))# 获取全局 options,JSON 格式(JsCode 生成的函数带引号,在前后端分离传输数据时使用).dump_options_with_quotes()     # 官方解释:保留 JS 方法引号)return grid

这里只附上部分代码,想要源码的可加我微信:gcw-410,昵称:浅情人不知,勿忘备注:生而为魔

如何在Django中优雅的使用pyecharts设计可视化BI系统(多图表)相关推荐

  1. 如何在Django中以GROUP BY查询?

    本文翻译自:How to query as GROUP BY in django? I query a model: 我查询一个模型: Members.objects.all() And it ret ...

  2. easyswoole数据库连接池_如何在 Swoole 中优雅的实现 MySQL 连接池

    如何在 Swoole 中优雅的实现 MySQL 连接池 一.为什么需要连接池 ? 数据库连接池指的是程序和数据库之间保持一定数量的连接不断开, 并且各个请求的连接可以相互复用, 减少重复连接数据库带来 ...

  3. django 传递中文_如何在Django中建立消息传递状态

    django 传递中文 by Ogundipe Samuel 由Ogundipe Samuel 如何在Django中建立消息传递状态 (How to Build a Message Delivery ...

  4. 如何在MyBatis中优雅的使用枚举

    From: https://segmentfault.com/a/1190000010755321 问题 在编码过程中,经常会遇到用某个数值来表示某种状态.类型或者阶段的情况,比如有这样一个枚举: p ...

  5. 如何在vscode中优雅的编写C语言

    如何在vscode中优雅的编写C语言 各位好,我认为vscode编辑器在windows环境下除了Pycharm外是最方便的IDE了,但在初学C语言时很少有人的第一个C语言软件使用的是vscode来编译 ...

  6. 如何在Django中接收JSON格式的数据

    Django做了大量工作简化我们的Web开发工作, 这其中当然也包括接收来自客户端的数据这一普遍需求. 大部分时候,从客户端传入的数据主要是FORM的POST数据,和来自URL的GET数据, 在Dja ...

  7. boost::unorder_map如何插入元素_「React」如何在React中优雅的实现动画

    最简单的动画组件实现 动画的本质,无非就是一个状态样式到另一个状态样式的过渡.最简单的动画组件,我们只需要指定两个状态的样式(进入的样式,离开的样式),以及一个开关(控制状态),即可完成. codep ...

  8. 如何在Django中进行调试,好方法? [关闭]

    因此,我开始学习使用Python和更高版本的Django进行编码. 第一次很难查看回溯,实际上要弄清楚我做错了什么以及语法错误在哪里. 现在已经过去了一段时间,而且我想我已经有了调试Django代码的 ...

  9. django 静态数据_如何在Django中使用静态数据?

    django 静态数据 Static Data means those data items that we cannot want to change, we want to use them as ...

最新文章

  1. 戴尔科技20.8亿美元出售旗下网络安全业务RSA
  2. 运维经理的运维经验总结
  3. 机器学习算法加强——SVM(支持向量机)
  4. C++特化的应用——类型萃取
  5. 01:MongoDB基础
  6. java的基本数据类型有八种
  7. ssms 缺少索引信息_SQLServer索引重建
  8. 空中照片:云层透过的阳光,双机同飞
  9. React.js和Vue.js有感—前端开发组件化思想的局部要点理解
  10. clockworkmod CWM简单介绍
  11. 【总结】密码学详细学习
  12. 数据标准化/归一化normalization
  13. iOS日常开发之frame和bounds的不同
  14. Minimum supported Gradle version is 4.10.1. Current version is 4.6.
  15. 3D物体标签(随镜头远近,调整自身大小)
  16. ruby中的符号_Ruby中的凡人和不朽符号
  17. java制作音乐播放器教程_教你轻松制作java音乐播放器
  18. int *pa[5]中的pa是什么
  19. 【HTML5】HTML5
  20. 闭环控制和PID在闭环控制中的作用以及程序编写

热门文章

  1. 视频教程-基于Java的WebSocket的聊天室-Java
  2. 【IPFS应用开发】ipfs安卓节点编译 ipfs andriod node
  3. 将两个有序顺序表合并为一个新的有序顺序表MergeList_Sq
  4. 欧拉-伯努利梁横向振动2
  5. OpenCV中的神经网络
  6. Apache Flink之架构概述和环境(章节一)
  7. 2020年三井化学触媒科学奖
  8. 基于 python 的单细胞转录因子分析
  9. ensembl数据库BioMart使用,查找转录本ID在ensembl与refseq中的对应关系
  10. Unity -- 粒子系统,拖尾与线