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

$ conda activate vl-convert-dev

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-0.12.0.tar.gz (3.9 MB view details)

Uploaded Source

Built Distributions

vl_convert_python-0.12.0-cp37-abi3-win_amd64.whl (23.8 MB view details)

Uploaded CPython 3.7+ Windows x86-64

vl_convert_python-0.12.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (23.8 MB view details)

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

vl_convert_python-0.12.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (23.2 MB view details)

Uploaded CPython 3.7+ manylinux: glibc 2.17+ ARM64

vl_convert_python-0.12.0-cp37-abi3-macosx_11_0_arm64.whl (21.9 MB view details)

Uploaded CPython 3.7+ macOS 11.0+ ARM64

vl_convert_python-0.12.0-cp37-abi3-macosx_10_7_x86_64.whl (22.9 MB view details)

Uploaded CPython 3.7+ macOS 10.7+ x86-64

File details

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

File metadata

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

File hashes

Hashes for vl_convert_python-0.12.0.tar.gz
Algorithm Hash digest
SHA256 a2279a6a4b8e5aefa713ecc1f999d684656a6e37fca1c25114c66def3e867f14
MD5 da8df7e98de9bff2d3409dc72c9f568a
BLAKE2b-256 5aae0ed98779ab54dfda43629155cd6fc346eb2ceae81820d233906b5615fcba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-0.12.0-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c7b08275dca3c32108a222d9fb6d8bae7a48073097d48712f5729c54850a1dc4
MD5 1395825d263ce449b58643db0ec32db3
BLAKE2b-256 00e39c213a377681d6bac5f34168efe628edc32b266f61619b415c068288d188

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-0.12.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 42177d0b028249e4ac43caf5139f9ed4a19ba77c738f0da42af07289f3f68ac8
MD5 023577fc04624cac7ee85b59a6daa998
BLAKE2b-256 31cc76478dd64e2e0b25ef9e0c3130b34d8def97bb253b9f627d4e820dfadb80

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-0.12.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 dc2bb29e4cddf8f6dcae03ab7b698d6477a7c3283918b273c687501ae145a92f
MD5 bf8472852b0ccfc217ff2b9943cba8a4
BLAKE2b-256 43f85edac2c29c16bd7207707f696180cfb40ebd337a006764fa9af427c11fb8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-0.12.0-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 02d6af605b4c2265066a28ac965a7498a6059a653b67274ad655beb5e4ddc393
MD5 92e645b74468dfbeabf49b521ef45bf3
BLAKE2b-256 62d27ceb521a481acd6f5f420a03b72b2a3f61adf5ac114402bb3afca23d2666

See more details on using hashes here.

File details

Details for the file vl_convert_python-0.12.0-cp37-abi3-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for vl_convert_python-0.12.0-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 729b23f1643998a83c1d93e24e581ea8239531afd7f1e32ec16ef1205f60189e
MD5 83eae9c98f93c169086fabc648e878a3
BLAKE2b-256 6c0c44db82b29379a01c4ebc54fc62a3dbccadb3234ee2e622a1d6d6521db698

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