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

Uploaded Source

Built Distributions

vl_convert_python-1.2.2-cp37-abi3-win_amd64.whl (26.6 MB view details)

Uploaded CPython 3.7+ Windows x86-64

vl_convert_python-1.2.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.6 MB view details)

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

vl_convert_python-1.2.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (26.8 MB view details)

Uploaded CPython 3.7+ manylinux: glibc 2.17+ ARM64

vl_convert_python-1.2.2-cp37-abi3-macosx_11_0_arm64.whl (25.4 MB view details)

Uploaded CPython 3.7+ macOS 11.0+ ARM64

vl_convert_python-1.2.2-cp37-abi3-macosx_10_12_x86_64.whl (26.3 MB view details)

Uploaded CPython 3.7+ macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: vl_convert_python-1.2.2.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.2.tar.gz
Algorithm Hash digest
SHA256 dbb93e1b0b8dbc8535bc0cf07d5ff2e61de6ee7b3ca435aab6652d5c09fe6e64
MD5 6d6fbf2cc603316a5aedc0a787aa7148
BLAKE2b-256 99eb2cbcac9fc31e2b43e249e40c6e809152db1a3fc55fcdcdef0892fa8d2c6d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.2-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 cee35b5c77b0a263f318c5793c392aa1e4e5972fe1b59f4c861edae97bbe52dc
MD5 787af1ea49f79c1553af84cbe8cff925
BLAKE2b-256 39badb205b4d51b7a377a400291cce3d5ed22852b91f17ac5bbd7657c256f6f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3ca7896c7a20d31005b53a82106400a8fdc97eb4c1b22d1adad5d5dbee335b8f
MD5 4f762ae243c5f5ddcfeeaff5d3b98303
BLAKE2b-256 5064fa23790edb1629c5144e57f9c55fb311614abdd52bd0710b509bee48703d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d7e17ca3994069f79f11c6d378ede505d6bad25d85752f7318fb257c929b9ff3
MD5 6afe35a9d32bbe5eb937e511f0c2fe0a
BLAKE2b-256 5fa83a7bb72e32b8740d2b71db1ca1df27d26941d53e8053753b19400ba2f9de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.2-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d0cbf7d8bafccf5a2f86ec16423618a4b82f55901c96ff5a7d162f37101d3607
MD5 3982419936ad02e95d8f90716b3fe502
BLAKE2b-256 5977af0098fe0631dcfb3f942e7da693f262c1a47f08d91980cccb49e83cb4fd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.2-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 44a54161a8ea87e0f552c9e25117b69e6e27ac9319b27bec806ef52cd26be2f1
MD5 0501f5e7f5051c4429d251253614a115
BLAKE2b-256 3ef9150b9687ed7efc039f043f41d5eab8ba58ed73a75cce227c8a087e9acf4d

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