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

Uploaded Source

Built Distributions

vl_convert_python-1.2.0-cp37-abi3-win_amd64.whl (26.7 MB view details)

Uploaded CPython 3.7+ Windows x86-64

vl_convert_python-1.2.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.7 MB view details)

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

vl_convert_python-1.2.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (26.9 MB view details)

Uploaded CPython 3.7+ manylinux: glibc 2.17+ ARM64

vl_convert_python-1.2.0-cp37-abi3-macosx_11_0_arm64.whl (25.3 MB view details)

Uploaded CPython 3.7+ macOS 11.0+ ARM64

vl_convert_python-1.2.0-cp37-abi3-macosx_10_7_x86_64.whl (26.7 MB view details)

Uploaded CPython 3.7+ macOS 10.7+ x86-64

File details

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

File metadata

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

File hashes

Hashes for vl_convert_python-1.2.0.tar.gz
Algorithm Hash digest
SHA256 fa92eba4c84cb69aa88c10b70e03de75318394ce90ffde1a657c644563380ed9
MD5 39878b25446d478a6a0034c7ee808edc
BLAKE2b-256 ec8e95bd10432384c55e4133aa0665ddb105d14f4f40d513e8f3578f3cb56fc1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.0-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 60113d6283ae4835053e15e5ccbb9e595cd66e8d294092c2975c57024fc5687b
MD5 8e04f064d3c7eba470c1d839f2ed701d
BLAKE2b-256 1682f614d3fb2d3ea5b93ae93fa5439d24cdcb08755ced00588e3c507c7f2363

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 04f88ad9a575026f23e89360faad681d2c26487bc18c07b277b874314ba2dff0
MD5 dd72c0c38b3ecba96b7b08e1be1b65f0
BLAKE2b-256 7204f26c23ad22a446e414dcc75ab6288fa57987e351b5de4743834509d7ef9c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 eff557769ed718421ae12ae7e23ae38de8c63798688e38f464b84824c4de5224
MD5 6b6e1d51234ef033ec3176cb319c9148
BLAKE2b-256 4788c6c31f7e5566904314266d5a21ab9dc4b7fb29dcb54d262fd98246af5a0b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.0-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d18d36994cd6f3a75fd1665a3689d820e124def6d5faf28cf5b4fd5d6ad1013e
MD5 7468d5cbd815f9e1e55f2478592e91f8
BLAKE2b-256 c57c5ecc5a8667a8b943b7e46c779c25d5ed4f8eed32094eb722218fea88317b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.0-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 9691fa0b94b2d59849149c7702ab12b9bc1f9b8db0db060d07ad6646108cb092
MD5 fad4b03f310a28b9b09bdfadc4346757
BLAKE2b-256 2ba93663ed8364432d32b6571e32752d31f8381016f6a4f8b863108186ea5729

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