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

Uploaded Source

Built Distributions

vl_convert_python-1.4.0-cp37-abi3-win_amd64.whl (27.8 MB view details)

Uploaded CPython 3.7+ Windows x86-64

vl_convert_python-1.4.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (28.7 MB view details)

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

vl_convert_python-1.4.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (27.9 MB view details)

Uploaded CPython 3.7+ manylinux: glibc 2.17+ ARM64

vl_convert_python-1.4.0-cp37-abi3-macosx_11_0_arm64.whl (25.8 MB view details)

Uploaded CPython 3.7+ macOS 11.0+ ARM64

vl_convert_python-1.4.0-cp37-abi3-macosx_10_12_x86_64.whl (26.9 MB view details)

Uploaded CPython 3.7+ macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for vl_convert_python-1.4.0.tar.gz
Algorithm Hash digest
SHA256 264d6f2338c7d3474e60c6907cca016b880b0c1c9be302bb84abc6690188a7e9
MD5 d72af612bc485ff9c9a71be2323faba2
BLAKE2b-256 66867c10836983bea06b4fff8fc7f7cbe2fc6de48af8cecaed5f54086b04d6f3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.4.0-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 d4fdf686c65a0619e5bf3966f034468513463191cd2492798a704e1b6b554abc
MD5 02e9a0b20b953d7849a8fac86d2405f1
BLAKE2b-256 e8ccc75d253fa9aaefde7286096e79cf31fdb668d42261dc197363459bd61040

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.4.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f9b8db8b8b090bf81bc68ba5de12f24c9186c865d20b541354d3f0be46d5dac9
MD5 eedf1789639da23fdebca91ed776a7b2
BLAKE2b-256 6a9373f42f29f49286f112353d59af114009e4979c3a920df46ebf4111758afc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.4.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6c1f61306ecd5a8040c0badf32e733a46f0553de74a6f341a8ff392a95b4daac
MD5 459ca62134de2a58ef0612b9e3612df7
BLAKE2b-256 1b83995dc804b1e647800e64bf0ed7b813f4e2b61b4edb16d0a335638c332fb6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.4.0-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6c86472dd1149010f66116b2a98943c8e7fa48a89667428c187a2ea52015f3c8
MD5 846cb06c472b89205e36b82023c860a0
BLAKE2b-256 2d7bcb16ad3e2f79a38187fc484e704698ffb491e9fcd639c6a907cc61a62d2b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.4.0-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6ad0e1c824c761f1970c8aa44f7e3239da8b5f5dc6d3507f26221df14659bd3c
MD5 d4ab0086c9214ef9df31d7069175c411
BLAKE2b-256 df42690adbc3e4e162963d446a58e965e9e01022de7e9075f651c17611909c3b

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