Skip to main content

Python wrapper for gum.jsx, a language for creating vector graphics

Project description

gum.py
nexus

A Python wrapper for gum.jsx, a language for creating visualizations using a React-like JSX dialect that evaluates to SVG. Designed for general graphics, plots, graphs, and network diagrams. Automatically renders in IPython console and Jupyter notebooks.

Head to compendiumlabs.ai/gum for a live demo and documentation on the underlying gum.jsx library.

Installation

pip install gum-jsx

Requires node to be installed for the gum.jsx backend. Set the GUM_JSX_RUNTIME environment variable to use a different runtime (e.g. bun).

Usage

Create visualizations using Python syntax that generates JSX:

import gum
from gum import C
from gum.gen import Plot, SymLine

# create a simple sine wave plot
plot = Plot(
    SymLine(fy=C.sin, xlim=(0, 2*C.pi), stroke=C.blue, stroke_width=2),
    ylim=(-1.5, 1.5), grid=True, margin=(0.2, 0.1), aspect=2
)

# display in terminal
gum.display(plot) # or just `plot` if you're in IPython or Jupyter

# or get the SVG string
svg = gum.evaluate(plot)

# or get the JSX code
jsx = str(plot)

If you're in IPython or Jupyter, you don't even need to call display. Just type plot and it will automatically display the visualization inline.

Pandas Integration

Plot DataFrames directly with high-level functions:

import pandas as pd
import numpy as np
from gum import lines, points, bars

# line plot from DataFrame
th = np.linspace(0, 2*np.pi, 100)
df = pd.DataFrame({ 'sin': np.sin(th), 'cos': np.cos(th) })
lines(df, margin=0.15)

# bar chart from Series
bars(pd.Series({'A': 3, 'B': 8, 'C': 5}))

Symbolic Expressions

Use C for constants and V for variables:

from gum import C, V

# C references gum.jsx constants and functions
C.sin, C.cos, C.pi, C.blue, C.red

# build symbolic expressions
decay = lambda x: C.exp(-x/2) * C.sin(3*x)

# V creates named variables bound to data
theta = V.theta(np.linspace(0, 2*np.pi, 100))

CLI

Display gum visualizations directly in the terminal. Requires a terminal with kitty image support, such as kitty or ghostty.

# pipe JSX code
cat input.jsx | python -m gum

# run a built-in demo
python -m gum -d plot

CLI options:

Option Description Default
-s, --size <size> Terminal display size 50
-t, --theme <theme> Theme: light or dark dark
-b, --background <color> Background color -
-d, --demo <name> Run a named demo -

Available demos (see gum/dem.py for code): gum, element, group, box, stack, grid, points, rect, ellipse, line, shape, spline, text, latex, titleframe, slide, sympoints, symline, symshape, symspline, symfill, graph, plot, axis, barplot, node, edge, network, math, arrays, colors

Components

Wraps all gum.jsx components. Key ones include:

Core: Element, Group, Svg

Layout: Box, Frame, Stack, HStack, VStack, Grid, Points

Shapes: Rect, Ellipse, Circle, Line, Shape, Spline

Text: Text, TextFrame, Latex, Equation, TitleFrame, TextStack, Slide

Plotting: Plot, Graph, Axis, HAxis, VAxis, Bars, BarPlot

Symbolic: SymLine, SymPoints, SymShape, SymSpline, SymFill, SymField

Network: Node, Edge, Network, Arrow, ArrowHead, ArrowSpline

See the gum.jsx documentation for detailed component reference.

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

gum_jsx-0.6.tar.gz (27.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gum_jsx-0.6-py3-none-any.whl (30.2 MB view details)

Uploaded Python 3

File details

Details for the file gum_jsx-0.6.tar.gz.

File metadata

  • Download URL: gum_jsx-0.6.tar.gz
  • Upload date:
  • Size: 27.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for gum_jsx-0.6.tar.gz
Algorithm Hash digest
SHA256 fad73554ec789e1a002ea77080629b1e60a0dc46a6e9bec308cbf4a8a1fe513d
MD5 95b0aa321b16892618ddfdb4afb91c47
BLAKE2b-256 91242a840295ca4ea09764b226483c0aac102c1adcbc588f6337e8ca1b1c091a

See more details on using hashes here.

File details

Details for the file gum_jsx-0.6-py3-none-any.whl.

File metadata

  • Download URL: gum_jsx-0.6-py3-none-any.whl
  • Upload date:
  • Size: 30.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for gum_jsx-0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 ae4c630f67446493dfad67678547d21b9a24fcc555a14743429238c412539efa
MD5 bade14dfa9fda3963916081c789175ad
BLAKE2b-256 7c8babcb855e3085c9daf67b44cb3258b7526a0460cff4d4fef6a959c882f4f3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page