当前pyecharts
版本为1.9.0
概述
render
包结构
render
包位于pyecharts
包顶级目录中,用于渲染图表。render
包结构如下:
├─render # 渲染设置包
│ │ display.py # 定义HTML、JavaScript显示类,用于支持在notebook中嵌入输出结果
│ │ engine.py # 定义渲染相关类、函数
│ │ snapshot.py # 定义渲染图片函数
│ │ __init__.py # 暴露渲染图片函数
│ │
│ ├─templates # 定义渲染模板
│ │ components.html
│ │ macro
│ │ nb_components.html
│ │ nb_jupyter_globe.html
│ │ nb_jupyter_lab.html
│ │ nb_jupyter_lab_tab.html
│ │ nb_jupyter_notebook.html
│ │ nb_jupyter_notebook_tab.html
│ │ nb_nteract.html
│ │ simple_chart.html
│ │ simple_globe.html
│ │ simple_page.html
│ │ simple_tab.html
display
模块
display
模块,路径为pyecharts/render/display.py
,作用为构造HTML和JavaScript的显示类,用于支持在notebook中嵌入输出结果。
display
模块包含HTML
和Javascript
这两个类,这两个类主要用于pyecharts/render/engine.py
,用于notebook渲染输出。该模块的设计几乎照搬IPython.display
模块的HTML
和Javascript
类的设计。
HTML
类
HTML
类的构造函数参数为data
,类型为字符串,即HTML字符串。__html__
和_repr_html_
方法等价,返回HTML字符串。
Javascript
类
Javascript
类的构造函数有三个参数:
data
:JavaScript语句字符串。css
:CSS文件的路径。类型为字符串或序列。lib
:JavaScript文件的路径。类型为字符串或序列。
_repr_javascript_
方法用于将构造函数接收的参数格式化为JavaScript语句,创建相关元素。
案例:HTML
类的应用
from pyecharts.render.display import HTML
s="<a href='foo'>adf</a>"
h=HTML(s)
print(h.data)
print(h.__html__())
print(h._repr_html_())
h
在notebook中的输出为:
案例:Javascript
类的应用
from pyecharts.render.display import Javascript
data = "var a=10;"
lib = "jquery.min.js"
css = "main.css"
js = Javascript(data=data,lib=lib,css=css)
print(js._repr_javascript_())
输出为:
var link = document.createElement("link");
link.ref = "stylesheet";
link.type = "text/css";
link.href = "main.css";
document.head.appendChild(link);
new Promise(function(resolve, reject) {
var script = document.createElement("script");
script.onload = resolve;
script.onerror = reject;
script.src = "jquery.min.js";
document.head.appendChild(script);
}).then(() => {
var a=10;
});
pyecharts/render/display.py
模块源码
class HTML:
def __init__(self, data: Optional[str] = None):
self.data = data
def _repr_html_(self):
return self.data
def __html__(self):
return self._repr_html_()
_lib_t1 = """new Promise(function(resolve, reject) {
var script = document.createElement("script");
script.onload = resolve;
script.onerror = reject;
script.src = "%s";
document.head.appendChild(script);
}).then(() => {
"""
_lib_t2 = """
});"""
_css_t = """var link = document.createElement("link");
link.ref = "stylesheet";
link.type = "text/css";
link.href = "%s";
document.head.appendChild(link);
"""
class Javascript:
def __init__(
self,
data: Optional[str] = None,
lib: Optional[Union[str, Sequence]] = None,
css: Optional[Union[str, Sequence]] = None,
):
if isinstance(lib, str):
lib = [lib]
elif lib is None:
lib = []
if isinstance(css, str):
css = [css]
elif css is None:
css = []
self.lib = lib
self.css = css
self.data = data or ""
def _repr_javascript_(self):
r = ""
for c in self.css:
r += _css_t % c
for d in self.lib:
r += _lib_t1 % d
r += self.data
r += _lib_t2 * len(self.lib)
return r