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

Uploaded Source

Built Distributions

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

Uploaded CPython 3.7+ Windows x86-64

vl_convert_python-1.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.0 MB view details)

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

vl_convert_python-1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (26.2 MB view details)

Uploaded CPython 3.7+ manylinux: glibc 2.17+ ARM64

vl_convert_python-1.0.0-cp37-abi3-macosx_11_0_arm64.whl (24.7 MB view details)

Uploaded CPython 3.7+ macOS 11.0+ ARM64

vl_convert_python-1.0.0-cp37-abi3-macosx_10_7_x86_64.whl (26.0 MB view details)

Uploaded CPython 3.7+ macOS 10.7+ x86-64

File details

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

File metadata

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

File hashes

Hashes for vl_convert_python-1.0.0.tar.gz
Algorithm Hash digest
SHA256 3e776a8c7d7297b078830ff56a46754aaf5c139a78b4aaa5bbc13bc6f6a87c31
MD5 73f055d81cfd20520a638e86b4f880de
BLAKE2b-256 ce03bc2fe3106f8620f836f6ccc2127f67ae9446cb740f57a61ea8951787fde8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.0.0-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 35b1d390e5397384f2dcd55d76b52b2bdfc3dbb9a7da16bef14a990fb6d83446
MD5 4466a24991203226b671cd404ec29606
BLAKE2b-256 bbfe0231497278975019badde5ccc3cd3a66c1ef66c5b70984fdae11252d0ff5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 796f4a252c2b0200aeae05f3616f5a615d96262d843a3618bfdbfd3a6cf388dd
MD5 bdd7e351c9bab9c55a99dd5997351d5f
BLAKE2b-256 217b8d17df9a1467ecb3ab3bc342c21e13bbc156532956d7d27e32d44e69da6b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4b9270a1b32f8a38bfd261181058fb73fc0f9587501beb691006f2c9c919a8d5
MD5 7f020bdd7ce3292cda3503c6cedf0b9d
BLAKE2b-256 9636c13dfd3fafb1b6f5e3aed9f715d7223f333e9c5ecfe12b2ab54641729c49

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.0.0-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5088b278c3f2578e0f9d5140b0f4351bf2e033f29d9a228a590e35f7c04c0bc9
MD5 faa0fa4db0491bfc7f298e5bb157da85
BLAKE2b-256 9d97ac5d7b156b52cdf9277525bb8cc7770b630bb5eed38165e41254f8af0199

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.0.0-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 da42536f7fe291f3b159589b51878622adaf14a11aa037f496f578dce0e6197a
MD5 6278a18067c787e009679d5561e0a9ac
BLAKE2b-256 33d899897e07d0e59b632fd5330f37ae30ef040b5d94e5f7dc79edb8ba3332c8

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