![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CMmBTZ1YjYxgDO4MjN5kTNzUGOlVjZyEmMhRDZwMDMl9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
简介
- 这次主要讲一个内置的函数 -- add_js_funcs
- 这个函数的作用顾名思义就是添加一个自定义的 javascript 函数
Demo
- 下面通过一个简单的例子给大家展示一下
- 话不多说直接上 Demo Code:
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.commons.utils import JsCode
from pyecharts.faker import Faker
c = (
Bar(
init_opts=opts.InitOpts(
bg_color={"type": "pattern", "image": JsCode("img"), "repeat": "no-repeat"},
)
)
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(
title="Bar-背景图基本示例",
subtitle="我是副标题",
title_textstyle_opts=opts.TextStyleOpts(color="white"),
)
)
)
c.add_js_funcs(
"""
var img = new Image(); img.src = 'https://s1.ax1x.com/2020/04/02/GJ1ggS.jpg';
"""
)
c.render()
效果
图 1
讲解
- 这张图之所以能够放到我们画的背后主要有以下几个点:
- 1、
中InitOpts
的字典(核心是:bg_Color
)JsCode("img")
- 2、代码中的
代码块(下面这段代码的作用就是实例化一个add_js_funcs
的对象赋值给Image
变量,然后给它的img
属性赋值为图片的 URL 链接)src
- 3、最后回到只要把这个变量放到第一点所提到的
中即可JsCode
- 1、
var img = new Image(); img.src = 'https://s1.ax1x.com/2020/04/02/GJ1ggS.jpg';
分析(Part 1)
-
和pyecharts
的代码不难理解,现在来看看究竟这段JavaScript
代码是如何有效的。(下面为JavaScript
生成的pyecharts
文件中的部分代码)html
图 2
- 第一个红框是不是很眼熟呢?Bingo!就是我们在
中写的add_js_funcs
代码了。JavaScript
- 第二个红框就是
中的pyecharts
,对应bg_color
就是Echarts
这个属性backgroundColor
分析(Part 2)
- 那段的
究竟是怎么填到那个位置的呢?先来了解一下 pyecharts 的渲染方式.JavaScript
- 简单来说
的原理实际上是通过pyecharts
模版引擎将所有的Jinja2
代码块生成出来。html
- 代码中通过高度抽象的画图类封装成最终
需要的Echarts
配置,最后在通过json
这个类进行渲染。(默认调用的是最普通的RenderEngine
方法,即生成一个普通但不平凡的render
文件)html
分析(Part 3)
- 回到正题,既然了解了大致的渲染逻辑和流程,那么最关键的就是模版了。
- 在普通模式下
最先找到的就是RenderEngine
这个模版。simple_chart.html
- 在当前模版下会发现需要引入
这个文件,此时macro
就会去调用Jinja2
中的macro
这个方法。render_chart_content
图 3
图 4
- 图四箭头中指向的红框就是核心部分了,所有通过
添加的代码块都会通过内部变量add_js_funcs
渲染到画图的配置之前。js_functions
- 至此,除了
代码部分的逻辑没有展示以外,大致的流程已经阐述完毕,相信各位看官已经有所了解~pyecharts
分析(Last Part)
-
继承自Bar
,RectChart
继承自RectChart
,Chart
继承自Chart
,Base
有一个Base
类Mixin
。ChartMixin
-
就隐藏在add_js_funcs
中,对应的变量即ChartMixin
self.js_functions
- 最终在
中调用的class Base
函数就会进行 Part 3 中的渲染逻辑,渲染出最终呈现的render
了。html
总结
- 其实
的源码并没有想象中的难,只是通过高度抽象之后变得有点绕,但经过抽丝剥茧后就会发现其实也就那么一回事。Easy to coding,easy to drawing.pyecharts
- 最后,希望这个专栏也不要沉下去,我尽量保持每周都写一篇文章发到这个专栏上。同时,也希望各位读者或者开发者可以分享一下自己的使用经历或者使用的 Demo。
- 最后的最后,希望各位数据开发者在读源码的过程中能够多一步,深一度。