Output

pygal can generate multiple output formats.

SVG

String

The obvious output is the vectorial output in svg format:

chart = pygal.Line()
...
chart.render()  # Return the svg as bytes

It can be rendered as unicode when specifying is_unicode=True or when disable_xml_declaration is used

chart = pygal.Line()
...
chart.render(is_unicode=True)  # Return the svg as a unicode string

File

You can also write the chart to a file using render_to_file:

chart = pygal.Line()
...
chart.render_to_file('/tmp/chart.svg')  # Write the chart in the specified file

PNG

With cairosvg installed you can directly get the png file using render_to_png:

chart = pygal.Line()
...
chart.render_to_png('/tmp/chart.png')  # Write the chart in the specified file

In case of rendered image turning up black, installing lxml, tinycss and cssselect should fix the issue.

Etree

It is possible to get the xml etree root element of the chart (or lxml etree node if lxml is installed) by calling the render_tree method:

chart = pygal.Line()
...
chart.render_tree()  # Return the svg root etree node

Base 64 data URI

You can directly output a base 64 encoded data uri for <embed> or <image> inclusion:

chart = pygal.Line()
...
chart.render_data_uri()  # Return `data:image/svg+xml;charset=utf-8;base64,...`

Browser

With lxml installed you can use the render_in_browser method to magically make your chart appear in you default browser.

chart = pygal.Line()
...
chart.render_in_browser()

PyQuery

If pyquery is installed you can get the pyquery object wrapping the chart by calling render_pyquery:

(This is mainly used for testing)

chart = pygal.Line()
...
chart.render_pyquery()  # Return pyquery object

Flask response

If you are using pygal in a flask app the render_response may come in handy:

@app.route('/charts/line.svg')
def line_route():
  chart = pygal.Line()
  ...
  return chart.render_response()

Django response

Same thing for django with render_django_response.