Skip to main content

gog for Python

Draw a plot by describing it. You name a table, a shape to draw, and which column goes to which part of the picture. gog turns that description into an SVG.

One engine, written in Rust, does the drawing for R, Python, Julia and JavaScript. Each language writes the plot in its own idiom and gets back the same picture, to the byte.

Why you might want this

One vocabulary instead of a hundred chart types. There is no histogram() to look up, and no arguments that belong to it alone. The whole vocabulary fits on one page, and the combinations are the chart types: a histogram is bar * bin, a bar shape plus a binning statistic. Keep the statistic and change the shape, and the same counts draw a line, an area or a step. You learn the words once and they keep working.

It says no, and says what to write instead. Ask for something the grammar cannot mean and you get a refusal that names the fix. Nothing is accepted and then quietly dropped, so a plot that draws is a plot that means what you wrote.

The same picture from four languages. A colleague working in R, Julia or JavaScript writes the same sentence in their own idiom and gets the same file, to the byte. A team that does not share a language can still share a plot.

A plot is data, not code. What you build is a description that the engine draws, so it can be saved, compared, generated by another program, or sent over a network. That is awkward when a plot is a live object inside a session.

Things that usually need a second package are already here — three dimensions, animation, circular layouts, treemaps and contour maps are part of the same vocabulary rather than add-ons with a syntax of their own.

Install

pip install gog

The wheel carries the drawing engine, so there is nothing else to install and no Rust toolchain to set up.

Your first plot

from gog import *

gm = {"gdp": [1000, 8000, 30000],
      "life": [52, 68, 79],
      "continent": ["Africa", "Asia", "Europe"]}

(data(gm) + point + x(col.gdp, scale="log") + y(col.life)
 + color(col.continent)).save("life.svg")

Read that aloud: "Given gm: points, x is gdp on a log scale, y is life, color by continent." That is the whole idea. A plot is a sentence, and you can say it before you can write it.

A table is a dict of columns, or anything with .columns and df[name] — a pandas or polars frame works, and neither is required.

What you can draw

Shapes — points, lines, bars, areas, steps, error bars, boxes, ribbons, text, paths, reference lines, shaded regions, and surfaces in three dimensions.

Ways to show a column — position, color, size, shape, texture, transparency, or a split into one series per group.

Statistics, written into the sentence — binning, counting, sums, averages, medians, ranges, smoothing curves and density estimates. You do not calculate them beforehand.

Arrangements — small multiples in rows or columns, several plots on one page, a circular layout, a third dimension, and animation over a column.

There are no chart-type functions. A histogram is bar * bin, a pie is a bar chart in a circle, and a violin is a density drawn as a ribbon. Learn the words once and they combine.

When a plot cannot be drawn, gog says so and names what to write instead. It never quietly ignores part of what you asked for.

Two things Python needs

A column is col.name. Python has no bare names, and here a plain string is a value, as in style(color="tomato"). Writing x("gdp") is refused, with the correct spelling named. Use col["life exp"] for a name with a space in it.

from gog import * replaces five builtinsbin, sum, min, max and range are statistics here. If you need the originals in the same file, use import gog and write gog.point, or take one back with from builtins import sum.

Examples

The manual is a book, and every plot in it is drawn by the engine while the page is being built. Nothing in it is a screenshot.

https://psychometrician.github.io/gog-book/

It is written in R, and every sentence translates by the two rules above. The book's Python chapter is the difference list, about a page long.

License

Apache License 2.0. See LICENSE and NOTICE, which ship inside the package.

Release files for gog 0.0.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for gog 0.0.4
File
gog-0.0.4-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
gog-0.0.4-py3-none-manylinux_2_28_x86_64.whl Python 3 none Linux glibc 2.28+ x86-64 Details
gog-0.0.4-py3-none-manylinux_2_28_aarch64.whl Python 3 none Linux glibc 2.28+ ARM64 Details
gog-0.0.4-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
gog-0.0.4-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details

Total release size: 15.4 MB

Release files / gog-0.0.4-py3-none-win_amd64.whl

Download URL gog-0.0.4-py3-none-win_amd64.whl
Size 2.9 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
99bf732e0666f07bb0889bc0c076582147f6af0aa7b3d2b9bbe086a4b5eb5256
BLAKE2b-256 checksum
How to use checksums
980cdd5c2466c3f82002a4bdd65370a923d2ba06e471a56847586f4093f2c59a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 6, 2026.

Transparency log

Release files / gog-0.0.4-py3-none-manylinux_2_28_x86_64.whl

Download URL gog-0.0.4-py3-none-manylinux_2_28_x86_64.whl
Size 3.3 MB
Tags Linux glibc 2.28+ x86-64 Python 3
SHA-256 checksum
How to use checksums
73a481684481a6d5426f37421e2f5b184c5e58eebcd62392bce43b445ea9173f
BLAKE2b-256 checksum
How to use checksums
b79cf757e3f7ec18c85fe5c09e4ae57d1b936ca1ff7261a33fc37657bf406558
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 6, 2026.

Transparency log

Release files / gog-0.0.4-py3-none-manylinux_2_28_aarch64.whl

Download URL gog-0.0.4-py3-none-manylinux_2_28_aarch64.whl
Size 3.2 MB
Tags Linux glibc 2.28+ ARM64 Python 3
SHA-256 checksum
How to use checksums
35c6070613d5e7df6fa14607d3a53e2133037e0d02b6d083e013bf8754cd5e9c
BLAKE2b-256 checksum
How to use checksums
cf78f26196d3651583492b8a9fa48a7cc1bc91a8731395ac59d2622f5510a028
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 6, 2026.

Transparency log

Release files / gog-0.0.4-py3-none-macosx_11_0_arm64.whl

Download URL gog-0.0.4-py3-none-macosx_11_0_arm64.whl
Size 2.9 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
4f9762ad3f3362237118b30b26791a4492a0d5cddf14bf90c2a9439a7bd0db08
BLAKE2b-256 checksum
How to use checksums
b3e0b05a008cf3a13e6e8ae604db1c8f938c57e946d675109c29c2e500d228df
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 6, 2026.

Transparency log

Release files / gog-0.0.4-py3-none-macosx_10_12_x86_64.whl

Download URL gog-0.0.4-py3-none-macosx_10_12_x86_64.whl
Size 3.1 MB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
0ee35000c36c3df3b551aeff331d4cbe90224c3ba00af24c2cf3f0051065b4cc
BLAKE2b-256 checksum
How to use checksums
834f55cfc4026e90268c72e862e60fe640f0e4c0bc92db4da5c0caf15716d7ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 6, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.0

5 release files

0.1.0

5 release files

0.0.5

5 release files

This release

0.0.4 This release

5 release files

0.0.3

5 release files

0.0.2

5 release files

0.0.1

5 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page