自定义渲染器#

渲染器,如在 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 类型之前,以任何方式处理图表内容。