Customizing Renderers#

A renderer, as introduced in Altair’s Renderer Framework, is a function that accepts a Vega-Lite or Vega visualization specification as a Python dict, and returns a Python dict in Jupyter’s MIME Bundle format. This dictionary will be returned by a charts _repr_mimebundle_ method.

The keys of the MIME bundle should be MIME types (such as image/png) and the values should be the data for that MIME type (text, base64 encoded binary or JSON). Altair’s default html renderer returns a cross-platform HTML representation using the "text/html" mimetype; schematically it looks like this:

def default_renderer(spec):
    bundle = {'text/html': generate_html(spec)}
    metadata = {}
    return bundle, metadata

If a renderer needs to do custom display logic that doesn’t use the frontend’s display system, it can also return an empty MIME bundle dict:

def empty_bundle_renderer(spec):
    # Custom display logic that uses the spec
    ...
    # Return empty MIME bundle
    return {}

As a simple example of a custom renderer, imagine we would like to add a plaintext renderer that renders a chart description in plain text. We could do it this way:

def plaintext_mimetype(spec):
    return {'text/plain': "description: " + spec.get('description', 'none')}

alt.renderers.register('plaintext', plaintext_mimetype)

The alt.renderers registry allows the user to define and enable new renderers. Now you can enable this mimetype and then when your chart is displayed you will see this description:

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

This is a simple example, but it shows you the flexibility of this approach. If you have a frontend that recognizes _repr_mimebundle_ as a means of obtaining a MIME type representation of a Python object, then you can define a function that will process the chart content in any way before returning any mimetype.