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

Uploaded Source

Built Distributions

vl_convert_python-1.6.0-cp37-abi3-win_amd64.whl (28.6 MB view details)

Uploaded CPython 3.7+ Windows x86-64

vl_convert_python-1.6.0-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.6.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (28.5 MB view details)

Uploaded CPython 3.7+ manylinux: glibc 2.17+ ARM64

vl_convert_python-1.6.0-cp37-abi3-macosx_11_0_arm64.whl (26.3 MB view details)

Uploaded CPython 3.7+ macOS 11.0+ ARM64

vl_convert_python-1.6.0-cp37-abi3-macosx_10_12_x86_64.whl (27.6 MB view details)

Uploaded CPython 3.7+ macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for vl_convert_python-1.6.0.tar.gz
Algorithm Hash digest
SHA256 f7539c5558026d41d870df3ea92546ef87956c7b62ca99426906e941115bfd41
MD5 fa90f5e81973239d3eaeee0da1175fea
BLAKE2b-256 8e16e32e28ab5eb2918003b7b015a8f7c04e6a6c010aa23ad0c36ed7dea0c8a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.6.0-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 2167d762f77991a36ce11d47d03d399219e80a1f19340ed1f6125713f8b31e87
MD5 758730918b542cfc06859d2f3bf3e5a1
BLAKE2b-256 32aadaa32ba3d05b43f397a07d6e49440ef5a3d1b1dcac6eee944c60b04f898c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.6.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 92d51f8c2e6c4f4c18f0a0e3a79912fc4bb77dee542d9b62bcb05cd076007f44
MD5 5d5626a3ba56180ef6ca59e540fab5f1
BLAKE2b-256 bcfaab6e43c99da686b9712502aa3011cb92ed276732d4bbf2630e3fea703815

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.6.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1d016d8d0be7a4ebb9dea447e0fe4373fb2998828ca05ae1b50c01d896edcece
MD5 ad5fb93ea2ae65b535b520619019f913
BLAKE2b-256 0375d4d697963db4467fba17476423874d1e581359966e7a59ab6a3d69807c0b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.6.0-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1c2ca0c2800925a1c6cf0cca4c79291205ceebabf1e9a40f90dd8bcead1af6eb
MD5 1120adba042af1cfbeb5204011d9ea4b
BLAKE2b-256 9016405caeb736f870439e153319346b9544f3364efa30c8cd8f07efd8f44600

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.6.0-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8c69676fa0dfb7b1af67364fd02304e5452ee6b873048d65fe4214f7cf726754
MD5 acef1ece9b2cd5c388663a757f43e0f6
BLAKE2b-256 1dba4a53812f2737d54e5e6251e05c5e5fb277a405d7704e0526c50372225061

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