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.9.0.post1.tar.gz (4.7 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

vl_convert_python-1.9.0.post1-cp37-abi3-win_amd64.whl (32.1 MB view details)

Uploaded CPython 3.7+Windows x86-64

vl_convert_python-1.9.0.post1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (33.5 MB view details)

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

vl_convert_python-1.9.0.post1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (33.4 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.17+ ARM64

vl_convert_python-1.9.0.post1-cp37-abi3-macosx_11_0_arm64.whl (29.7 MB view details)

Uploaded CPython 3.7+macOS 11.0+ ARM64

vl_convert_python-1.9.0.post1-cp37-abi3-macosx_10_12_x86_64.whl (30.5 MB view details)

Uploaded CPython 3.7+macOS 10.12+ x86-64

File details

Details for the file vl_convert_python-1.9.0.post1.tar.gz.

File metadata

File hashes

Hashes for vl_convert_python-1.9.0.post1.tar.gz
Algorithm Hash digest
SHA256 a5b06b3128037519001166f5341ec7831e19fbd7f3a5f78f73d557ac2d5859ef
MD5 6dd02dd607f945d13b25e389a79aac90
BLAKE2b-256 938936722344d1758ec2106f4e8eca980f173cfe8f8d0358c1b77cc5d2e035a4

See more details on using hashes here.

File details

Details for the file vl_convert_python-1.9.0.post1-cp37-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for vl_convert_python-1.9.0.post1-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 7e263269ac0d304640ca842b44dfe430ed863accd9edecff42e279bfc48ce940
MD5 faf32d3eadcd1720d068fc2b0e6f909a
BLAKE2b-256 2fdb6e8616587035bf0745d0f10b1791c7e945180ac5d6b28677d2f2b3ca693c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.9.0.post1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3c1558fa0055e88c465bd3d71760cde9fa2c94a95f776a0ef9178252fd820b1f
MD5 2e4a55bc51f0752d269461bbff85bc10
BLAKE2b-256 a01888e02899b72fa8273ffb32bde12b0e5776ee0fd9fb29559a49c48ec4c5fa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.9.0.post1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e6ecfe4b7e2ea9e8c30fd6d6eaea3ef85475be1ad249407d9796dce4ecdb5b32
MD5 5338cd7b1bb3868a1c8c57240479ef88
BLAKE2b-256 b8e25645a1bc174c53ff8cd305ed76a4a76ba36e155302db20b42b7e78daeef8

See more details on using hashes here.

File details

Details for the file vl_convert_python-1.9.0.post1-cp37-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vl_convert_python-1.9.0.post1-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b0e7a3245f32addec7e7abeb1badf72b1513ed71ba1dba7aca853901217b3f4e
MD5 fd29e70b6da0a39fa0d4349b6b8aec9c
BLAKE2b-256 62e6e7d0b538c2f0daaf120901dc113bd5d5d1fa51a9532fa5ffd90234e8c69e

See more details on using hashes here.

File details

Details for the file vl_convert_python-1.9.0.post1-cp37-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for vl_convert_python-1.9.0.post1-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 43e9515f65bbcd317d1ef328787fd7bf0344c2fde9292eb7a0e64d5d3d29fccb
MD5 4cf8f2a9ceb195a4c9300dab1cce97f3
BLAKE2b-256 9f59e5862245972ff467d38b0eb5ad28154685e23ecabb47e14f2b6962da7b56

See more details on using hashes here.

Supported by

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