定制渲染器#
渲染器,如Altair 的渲染器框架中所介绍的,是一个函数,它接受 Vega-Lite 或 Vega 可视化规范(作为 Python dict
),并返回符合 Jupyter MIME Bundle 格式的 Python dict
。这个字典将由图表的 _repr_mimebundle_
方法返回。
MIME bundle 的键应该是 MIME 类型(例如 image/png
),值应该是该 MIME 类型的数据(文本、base64 编码的二进制或 JSON)。Altair 的默认 html
渲染器使用 "text/html"
MIME 类型返回跨平台的 HTML 表示;其示意图如下所示
def default_renderer(spec):
bundle = {'text/html': generate_html(spec)}
metadata = {}
return bundle, metadata
如果渲染器需要执行不使用前端显示系统的定制显示逻辑,它也可以返回一个空的 MIME bundle 字典。
def empty_bundle_renderer(spec):
# Custom display logic that uses the spec
...
# Return empty MIME bundle
return {}
作为一个定制渲染器的简单示例,假设我们想添加一个 plaintext
渲染器,它以纯文本形式渲染图表描述。我们可以这样做
def plaintext_mimetype(spec):
return {'text/plain': "description: " + spec.get('description', 'none')}
alt.renderers.register('plaintext', plaintext_mimetype)
alt.renderers
注册表允许用户定义和启用新的渲染器。现在你可以启用这个 MIME 类型,然后当你的图表显示时,你将看到这个描述
alt.renderers.enable('plaintext')
alt.Chart('data.txt').mark_point().encode(
x='x:Q',
y='y:Q'
).properties(
description='This is a simple chart'
)
description: This is a simple chart
这是一个简单的例子,但它展示了这种方法的灵活性。如果你有一个前端能够识别 _repr_mimebundle_
作为获取 Python 对象 MIME 类型表示的方式,那么你可以定义一个函数,在返回任何 MIME 类型之前以任何方式处理图表内容。