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

Uploaded Source

Built Distributions

vl_convert_python-1.2.4-cp37-abi3-win_amd64.whl (27.0 MB view details)

Uploaded CPython 3.7+ Windows x86-64

vl_convert_python-1.2.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.9 MB view details)

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

vl_convert_python-1.2.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (27.1 MB view details)

Uploaded CPython 3.7+ manylinux: glibc 2.17+ ARM64

vl_convert_python-1.2.4-cp37-abi3-macosx_11_0_arm64.whl (25.2 MB view details)

Uploaded CPython 3.7+ macOS 11.0+ ARM64

vl_convert_python-1.2.4-cp37-abi3-macosx_10_12_x86_64.whl (26.2 MB view details)

Uploaded CPython 3.7+ macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: vl_convert_python-1.2.4.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.4.tar.gz
Algorithm Hash digest
SHA256 d6f2794532752a1fe142abd578846b95cceee3e3abe228764760c6ef7bc4a320
MD5 9804dae128430b615ef6b33d7273b631
BLAKE2b-256 935334a131deb9549e3302a04d7f37ef1c2e1374d6c772874aa101f3963a1b8a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.4-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 10cc555b23f5e94b65751396e15642defb89ad6006d666ace8b10df8021f09a5
MD5 226208f597ea3055747639e0822c3b7e
BLAKE2b-256 54d5eb6b80f61d8403a64e294c643de107252b876e6ee375bb630fdb3afae6d3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 565b425e152741ee8471a4cfd771def54257d2149cef93af0bb77a41d581687c
MD5 62ccfc9ba4e1dbd4f248cdf3811037d1
BLAKE2b-256 cc91615f8d112b9b33e2faab8e639c393646d5795f1ecdd8b12de86fbc3e9717

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d456dcae9a58e979daf64fda554c6a0c05140355d8baf99eda5db0683d70633c
MD5 81e35cb57cede881d9c627c4967a7378
BLAKE2b-256 5e84dc1f454064948f2b6db2d5cd32b68625d52f89bcd39b5470ce0761a38ff4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.4-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 87a73ad095e8e8bc5d7b3e1621124432c6a1ac7378e26c9ee158e199495238d2
MD5 ccaefdb4c4ac8f23224fe12e021b6406
BLAKE2b-256 9e140798f5f9b730fdf6089a2e6a87e532c75739b678e97504e1c454244863c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.4-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f002dc030be5eb4394222eed629a4146c0b1631e45d8dd8f098e33bbf2aa9899
MD5 f91bce3db2022ea1ece61b7192873e8a
BLAKE2b-256 4c140ad625bea414b179ee62395b3c6e8813582e4149e106bca0cb20068041bc

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