Skip to main content

Convert Vega-Lite chart specifications to SVG, PNG, or Vega

Project description

Overview

vl-convert-python is a dependency-free Python package for converting Vega-Lite chart specifications into static images (SVG or PNG) or Vega chart specifications.

Since an Altair chart can generate Vega-Lite, this package can be used to easily create static images from Altair charts.

Try it out on Binder!
Binder

Installation

vl-convert-python can be installed using pip with

$ pip install vl-convert-python

Usage

The vl-convert-python package provides a series of conversion functions under the vl_convert module.

Convert Vega-Lite to SVG, PNG, and Vega

The vegalite_to_svg and vegalite_to_png functions can be used to convert Vega-Lite specifications to static SVG and PNG images respectively. The vegalite_to_vega function can be used to convert a Vega-Lite specification to a Vega specification.

import vl_convert as vlc
import json

vl_spec = r"""
{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "data": {"url": "https://raw.githubusercontent.com/vega/vega-datasets/next/data/movies.json"},
  "mark": "circle",
  "encoding": {
    "x": {
      "bin": {"maxbins": 10},
      "field": "IMDB Rating"
    },
    "y": {
      "bin": {"maxbins": 10},
      "field": "Rotten Tomatoes Rating"
    },
    "size": {"aggregate": "count"}
  }
}
"""

# Create SVG image string and then write to a file
svg_str = vlc.vegalite_to_svg(vl_spec=vl_spec)
with open("chart.svg", "wt") as f:
    f.write(svg_str)

# Create PNG image data and then write to a file
png_data = vlc.vegalite_to_png(vl_spec=vl_spec, scale=2)
with open("chart.png", "wb") as f:
    f.write(png_data)

# Create low-level Vega representation of chart and write to file
vg_spec = vlc.vegalite_to_vega(vl_spec)
with open("chart.vg.json", "wt") as f:
    json.dump(vg_spec, f)

Convert Altair Chart to SVG, PNG, and Vega

The Altair visualization library provides a Pythonic API for generating Vega-Lite visualizations. As such, vl-convert-python can be used to convert Altair charts to PNG, SVG, or Vega. The vegalite_* functions support an optional vl_version argument that can be used to specify the particular version of the Vega-Lite JavaScript library to use. Version 4.2 of the Altair package uses Vega-Lite version 4.17, so this is the version that should be specified when converting Altair charts.

import altair as alt
from vega_datasets import data
import vl_convert as vlc
import json

source = data.barley()

chart = alt.Chart(source).mark_bar().encode(
    x='sum(yield)',
    y='variety',
    color='site'
)

# Create SVG image string and then write to a file
svg_str = vlc.vegalite_to_svg(chart.to_json(), vl_version="4.17")
with open("altair_chart.svg", "wt") as f:
    f.write(svg_str)

# Create PNG image data and then write to a file
png_data = vlc.vegalite_to_png(chart.to_json(), vl_version="4.17", scale=2)
with open("altair_chart.png", "wb") as f:
    f.write(png_data)

# Create low-level Vega representation of chart and write to file
vg_spec = vlc.vegalite_to_vega(chart.to_json(), vl_version="4.17")
with open("altair_chart.vg.json", "wt") as f:
    json.dump(vg_spec, f)

How it works

This crate uses PyO3 to wrap the vl-convert-rs Rust crate as a Python library. The vl-convert-rs crate is a self-contained Rust library for converting Vega-Lite visualization specifications into various formats. The conversions are performed using the Vega-Lite and Vega JavaScript libraries running in a v8 JavaScript runtime provided by the deno_runtime crate. Font metrics and SVG-to-PNG conversions are provided by the resvg crate.

Of note, vl-convert-python is fully self-contained and has no dependency on an external web browser or Node.js runtime.

Development setup

Create development conda environment

$ conda create -n vl-convert-dev -c conda-forge python=3.10 deno maturin altair pytest black black-jupyter scikit-image

Activate environment and pip install remaining dependencies

$ conda activate vl-convert-dev
$ pip install pypdfium2

Change to Python package directory

$ cd vl-convert-python

Build Rust python package with maturin in develop mode

$ maturin develop --release

Run tests

$ pytest tests

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vl_convert_python-1.6.1.tar.gz (4.7 MB view details)

Uploaded Source

Built Distributions

vl_convert_python-1.6.1-cp37-abi3-win_amd64.whl (28.6 MB view details)

Uploaded CPython 3.7+ Windows x86-64

vl_convert_python-1.6.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (29.4 MB view details)

Uploaded CPython 3.7+ manylinux: glibc 2.17+ x86-64

vl_convert_python-1.6.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (28.5 MB view details)

Uploaded CPython 3.7+ manylinux: glibc 2.17+ ARM64

vl_convert_python-1.6.1-cp37-abi3-macosx_11_0_arm64.whl (26.3 MB view details)

Uploaded CPython 3.7+ macOS 11.0+ ARM64

vl_convert_python-1.6.1-cp37-abi3-macosx_10_12_x86_64.whl (27.5 MB view details)

Uploaded CPython 3.7+ macOS 10.12+ x86-64

File details

Details for the file vl_convert_python-1.6.1.tar.gz.

File metadata

  • Download URL: vl_convert_python-1.6.1.tar.gz
  • Upload date:
  • Size: 4.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.7.1

File hashes

Hashes for vl_convert_python-1.6.1.tar.gz
Algorithm Hash digest
SHA256 b70935dbf792118a42aae27b7465359cbc014e30e63ef6ba7a0f8974707d9c1c
MD5 d4a6e6c3e862b3cb3cf9a9dfc3b16255
BLAKE2b-256 63d01e4d68882359c783570a272844afd0485f1f181767a91074e5b11cf2b51d

See more details on using hashes here.

File details

Details for the file vl_convert_python-1.6.1-cp37-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for vl_convert_python-1.6.1-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 cafcafc03b2c85925f969f917727b213fb1b6bfb3809b05a673f26f85b0510d0
MD5 d498382f0f2fc55291f545cb51752c2f
BLAKE2b-256 b7affcbea1ede66d2edf327b38aac5d104ce301a01efa7e27df68522e2f0d46e

See more details on using hashes here.

File details

Details for the file vl_convert_python-1.6.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for vl_convert_python-1.6.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 12d8adb1e243f1f73424506c05adb80b7e99a507c54ca1b8c52122c599d7baaa
MD5 94c7cbe0919f7b11bbc07f37fc9ec9cc
BLAKE2b-256 fd203bf57999bddfec74622a1f6f2b10e5205e8d8af664a17c7d6af36d87e94e

See more details on using hashes here.

File details

Details for the file vl_convert_python-1.6.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for vl_convert_python-1.6.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 28532e54d76a99eedcaec39b98b0b87f09ad24b23a2e129438cfbd27fd0ec001
MD5 52e908db7b1c381a9027f097d71fbc12
BLAKE2b-256 0d49826b73cbe8440522fc24fe5360f4c98c8a7be8e1cc8abad1fac3b11296e6

See more details on using hashes here.

File details

Details for the file vl_convert_python-1.6.1-cp37-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vl_convert_python-1.6.1-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cf0ede6afa4cdfc39d0649beeedad9b93790d8bbcceab125c0d45b5a6b6e77f3
MD5 bdebd06431972949b20f19516e24537b
BLAKE2b-256 04f5f62f594208b3c597016c810fddd7c14ea4c185ae937cf5b87707210a2003

See more details on using hashes here.

File details

Details for the file vl_convert_python-1.6.1-cp37-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for vl_convert_python-1.6.1-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b531ef9b674530e8aac91682d4db1ae66b616fddfd68f482ea9ceae03dec9e78
MD5 0a67868136c2a15c6849a2f7588ae2b0
BLAKE2b-256 ba9a476a51dc05cac44ebf4fc88eb19571c02b65b416a102830a44bccac2e2cd

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page