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

Uploaded Source

Built Distributions

vl_convert_python-1.5.1-cp37-abi3-win_amd64.whl (28.7 MB view details)

Uploaded CPython 3.7+ Windows x86-64

vl_convert_python-1.5.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.5.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (28.6 MB view details)

Uploaded CPython 3.7+ manylinux: glibc 2.17+ ARM64

vl_convert_python-1.5.1-cp37-abi3-macosx_11_0_arm64.whl (26.5 MB view details)

Uploaded CPython 3.7+ macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for vl_convert_python-1.5.1.tar.gz
Algorithm Hash digest
SHA256 014d47361d5f21bbd2f3e3c58455609b9c4ace65f7ccdd881243274f3f91f457
MD5 df9e1353d57e6db2762eac2acb384241
BLAKE2b-256 c12e36013222d51cce049de3c9ef1e8816bdf42f75ab087cd9ba484e049a202d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.5.1-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 bece7797f380ecb4ee6fb7b955e4bd74690909cf055a620299b5f8fbbdfb4a93
MD5 09fcf3801c2a8f12b37112233e5b0757
BLAKE2b-256 e1bce69553cdc4024baac282b023163f22e37db9c30aafd710e6750817bb6db7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.5.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a552b5f49acc5c76488d19bd52a4c7293e875f4fbca73b720816cec7bf029348
MD5 a7e81e4e5075a3389835332f025ff04d
BLAKE2b-256 814ef78e2d801a901c1243b6d4154c3bf04f69cd4ad45a519ea8c708f87c4a9f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.5.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d72fbcf9a70d3543654532d773cabc87e07eee60cbbd9f235942f151840a539e
MD5 4884499475a01766aef7919b9af5cf32
BLAKE2b-256 0070c09e6ea49e963fdf68f28fe45ea2d603cbcaf5716c29bace894b30e3c8b0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.5.1-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fe7038cb924f554ca17b66d56e253921a9b6b44fc6b42c2868ac42cd9c3b5459
MD5 a16d2a2b7d4c7599aa46d4e80d709362
BLAKE2b-256 e4ae6ef3e62834e289f974a6256c1ede3a610297c1ef6565b3ca67cbd1fd7d86

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