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

$ conda activate vl-convert-dev

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

Uploaded Source

Built Distributions

vl_convert_python-0.13.0-cp37-abi3-win_amd64.whl (23.9 MB view details)

Uploaded CPython 3.7+ Windows x86-64

vl_convert_python-0.13.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (23.9 MB view details)

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

vl_convert_python-0.13.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (23.3 MB view details)

Uploaded CPython 3.7+ manylinux: glibc 2.17+ ARM64

vl_convert_python-0.13.0-cp37-abi3-macosx_11_0_arm64.whl (21.9 MB view details)

Uploaded CPython 3.7+ macOS 11.0+ ARM64

vl_convert_python-0.13.0-cp37-abi3-macosx_10_7_x86_64.whl (23.0 MB view details)

Uploaded CPython 3.7+ macOS 10.7+ x86-64

File details

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

File metadata

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

File hashes

Hashes for vl_convert_python-0.13.0.tar.gz
Algorithm Hash digest
SHA256 8fda3ef10b1c2268f0d504e3860808785c8362b5eb6a582272882726decec899
MD5 a2b54b06f18b0e9bb5b827f38dbbbf23
BLAKE2b-256 bcc3270b83f294550478ac089b549ab7a978558db9ef01dee49755bbd70ebd70

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-0.13.0-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 cd18029b86ebb1842fad00600553ae1fe680f3a36027045a7d1641839317b06b
MD5 572d6020116cf367ed1520d729e01a93
BLAKE2b-256 28f7d5e06bbbeaee3a1e0e15d1179da6edde689b1d78807941f762d46b879e49

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-0.13.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 715182a40e792f1e62005c11eca2221937ee477aed4009531eb65a6abf8e03bb
MD5 d3fcae3bdab35b23fef36fd1908d52f8
BLAKE2b-256 1d700c9c6470fd83ae871935f1de47c5fba5c9b4a93b33ddcc0b857f6f847278

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-0.13.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3c59644b76b088e5dfb32216a020a68aeeb3974330a06c3727f2d947ba527431
MD5 72e1080f275d302be90e6de134c4f5a0
BLAKE2b-256 a80c43768d1054481bfc0eacee41986b4de7c07d66596e3a8afb48ee35c433da

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-0.13.0-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 af5c24ddb2b04e3063b4fc2ff8cb6d6956a60fbdca9f7a5ab9516ffd8c7da6ef
MD5 0a9819095fb8a592867d25ec2d5302ea
BLAKE2b-256 3d9f357c7c741c348e8405ee8d216d3a4d52c4e8b00d8768e9ccd864ce3e6d59

See more details on using hashes here.

File details

Details for the file vl_convert_python-0.13.0-cp37-abi3-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for vl_convert_python-0.13.0-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 35d3ee85df7ccd04e4f18859b648937c469aeb0b29b567ecc40a1554c4db6c04
MD5 5039dca2bbf47e3f8855ad4b107494a9
BLAKE2b-256 33dee28f002a766017c4566e341da8ed90e64e4f7990f8295e896488b9481f96

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