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

Uploaded Source

Built Distributions

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

Uploaded CPython 3.7+ Windows x86-64

vl_convert_python-1.2.3-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.3-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.3-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.3-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.3.tar.gz.

File metadata

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

File hashes

Hashes for vl_convert_python-1.2.3.tar.gz
Algorithm Hash digest
SHA256 1adeaa46041ccff47fee0119b136f5e12211d56726a142fc78cb14ad3c141e09
MD5 f092499ce5d4e4fd9763e139e8720d9b
BLAKE2b-256 9a3e10cc273d668d9e88401829024e6f8f1e141b741195e32301a7c9d05f9266

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.3-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 9fcce91a2dbe2168bc7e081851f376b52987b4a4abe25a99ed731684bed4a5a2
MD5 c0899677d1f6adddc0b0aa379f2f219c
BLAKE2b-256 0f722ff80b6f3af216d45ace65e0125ee3f2c5b7e39937ecc42c0b9eff2acaf9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b1603d158037a06b5d3a8d9f61e83eb56949dfab2f9ed9b6dd2b0811565afdea
MD5 369b51d2391585530026663dcb0f2b35
BLAKE2b-256 00746e519803f5d27079a32b2e6231a03a5c44b76531f9061cddfd7971328a98

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2c37b349689d83ccc449a0063ff3804fe28d21c103cfa36e284882ee1d128de2
MD5 bab333d32c79ba91a52ecaba05ddf317
BLAKE2b-256 28a9769373599834073a6a9fee47191c89c993f82612c5f8580a3c08de6dbce0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.3-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2adec7f87bea3a15a991e7a28642c2758ca224cb78d024b1d47e00f02fd9c97f
MD5 e9c78ae263c11057d414e9ce802c4e84
BLAKE2b-256 1603f6be01a7272b3f944024ae7207d425eaea0285620e88041cc315e18516a9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.2.3-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4d52a3006aa82f950ecc058a76694a76e6e279b84a4144bd28971b408c0974fa
MD5 537acab3f95f08d8d1b5b8ba28e6aa4a
BLAKE2b-256 4bdd340717174cf47265a41a7f301f5b742c113afafa710dd07a08fb20d21055

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