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

Uploaded Source

Built Distributions

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

Uploaded CPython 3.7+ Windows x86-64

vl_convert_python-1.3.0-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.3.0-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.3.0-cp37-abi3-macosx_11_0_arm64.whl (25.2 MB view details)

Uploaded CPython 3.7+ macOS 11.0+ ARM64

vl_convert_python-1.3.0-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.3.0.tar.gz.

File metadata

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

File hashes

Hashes for vl_convert_python-1.3.0.tar.gz
Algorithm Hash digest
SHA256 de1462151dfbba7b2a17881dac1d2269662012c252f1e9d1537a4daed5e36067
MD5 344afbe5b4d905ce17f6ff7d440c1767
BLAKE2b-256 61f95fadb749ccf3fb83a63af59c0f33da1f84fe4cc0ce64874582d1afa942a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.3.0-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 5ef103bab086c502e67c188282a46155c217181aa39d75f3ad567a3f3669a218
MD5 63f034e1f2b4124dc1a633f3c3e57ea3
BLAKE2b-256 df075e3e7ce09753da2d430b53edee94e98ac5b6d6a5e9db84123599f8b9a625

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.3.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0649d71cf73c1fb3104dee448a4f8cb1eba2fd98fbb16dba53c5112632d9bc99
MD5 2ca8479c28935563fdc74630f7306916
BLAKE2b-256 06bbc4926251624c427f90b222e273576fadfb480412ca2db9d93bbac6090b7a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.3.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 aad714796a7bc3577550690378c088b686d28b4d9e45f92b71f78c5d59025ebb
MD5 a673a00f64904375450c0ff69d881963
BLAKE2b-256 7dd8200a2c04e1f85ac6428b62b126185a0c28beeb51b4c634c28ee911a82e94

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.3.0-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 db5e2e99f1cad6e585ac163a96e622b0a8a790ca2393c8633efe48494419b50a
MD5 4746961b4d7bfae58547899ca4ae8165
BLAKE2b-256 6b3578e6e810aa5c4698a83c846f99eeb0d0a14e2fdab32e9e18922364f6f968

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.3.0-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 cc65cf69745c6bc5467c39afd5cc6302cb695d009f3dc94831ed79eb30d80bb7
MD5 57754f97370ef468571a2941aeecc140
BLAKE2b-256 7c984e1ff34e6964bf1cdfa6bad5d741cfa7e7affa29c15280da361dc7c3c064

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