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

Uploaded Source

Built Distributions

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

Uploaded CPython 3.7+ Windows x86-64

vl_convert_python-1.0.1-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.1-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.1-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.1-cp37-abi3-macosx_10_7_x86_64.whl (25.9 MB view details)

Uploaded CPython 3.7+ macOS 10.7+ x86-64

File details

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

File metadata

  • Download URL: vl_convert_python-1.0.1.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.1.tar.gz
Algorithm Hash digest
SHA256 488565b6a0eb5e75558f82147217c5090672bee58745e79225b2f2902db9fffd
MD5 4cea5f298111f2e2b39d7c5d28b85c16
BLAKE2b-256 6bea2bcbbd569846f47f5379e1bab7beb0cf54ca7721b3fb7396b66fc1e5d36b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.0.1-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 ad0c8c10f1e96b499c4878193de280a2a03cc96e6d3fb9b1b6d878aaf24a82f3
MD5 2fdb943d32496d25d229ecac394c8e69
BLAKE2b-256 711a28048ee82182b520cfceae6c5946a17798e711c38f4d8b0e679cdd8aadf4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.0.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2142be5a8ca5adbdc207c25a541659ef95a640b64d4e465787d4bbc7e09d7e5d
MD5 14a8e80238b877e41675cad795fadece
BLAKE2b-256 e69a3d8a183eb28b698439fb2b43b82e0d911e899658c2f9d6e4668e673f70f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.0.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 267baeea59b69fdb076c6e44416a34476ab1639b23c78b7fdcd7e9f39d20f457
MD5 b0cb5eab7ba26fe39e3354c092fdefdb
BLAKE2b-256 8e3f573dd967df46c54bf8bc3fed175f460972e7d794a5a0b2fe631a9f6ec4ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.0.1-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3cb8b13171b530d82d6a153e2ab7f1245d342c84cf22f3ccbe9770d0a90a6ac5
MD5 c43ecb388cff0ad6d6dbaacb7833529e
BLAKE2b-256 87fc29556ef9e8642effb9e7ef5dc19cf49323779ad3082b3ba3f47ab90f3470

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for vl_convert_python-1.0.1-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 7e7de0e3e4c2e95a39a5adf5f431b2ca63506cd3fd2a752f52a87f20841c65a6
MD5 ff016d2e1d8d78b107745ab3626bba11
BLAKE2b-256 83d64994ee4db038bbe54087ea112f5321142133091fe6738891807c4e288e63

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