自定义渲染器#
渲染器,如在 Altair的渲染框架 中介绍的,是一个接受Vega-Lite或Vega可视化规范作为Python dict 的函数,并返回一个Python dict 在Jupyter的 MIME Bundle格式 中。这个字典将由图表的 _repr_mimebundle_ 方法返回。
MIME包的键应该是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 包字典:
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注册表允许用户定义和启用新的渲染器。现在您可以启用此mimetype,然后当您的图表显示时,您将看到此描述:
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 类型之前,以任何方式处理图表内容。