Python API for generating XKCD-style charts
Project description
chart.xkcd
A Python + JavaScript library for creating xkcd-style charts. See this repository for the original code.
Setup
Install Python dependencies (requires Python 3.13+):
uv pip install -e ".[dev]"
Install JavaScript dependencies:
cd js && npm install && cd -
Generating example data
The examples use data from snailz,
a synthetic data generator. The configuration is in examples/snailz.json.
To regenerate the SQLite database and CSV files:
task data
This runs snailz to create data/snailz.db, then runs each SQL file
in examples/*.sql against it to produce CSV files in tmp/.
Building
Build the font data, JavaScript bundle, and Python package:
task build
This:
- Encodes
assets/xkcd-script.ttfas a base64 data URL injs/src/utils/fontData.js. - Bundles the JavaScript source with esbuild into
src/chart_xkcd/static/chart.xkcd.js. - Builds the Python wheel and sdist with
python -m build.
Examples
Python command-line examples (examples/*.py)
Each chart type has a standalone script that reads a CSV file and writes a static HTML page:
| Script | Chart type | Input CSV | Description |
|---|---|---|---|
bar.py |
Bar | tmp/bar.csv |
Samples per person |
stacked_bar.py |
StackedBar | tmp/stacked_bar.csv |
Samples by variety and grid |
line.py |
Line | tmp/line.csv |
Samples collected per week |
scatter.py |
Scatter | tmp/scatter.csv |
Snail mass vs diameter |
pie.py |
Pie | tmp/pie.csv |
Samples by variety |
radar.py |
Radar | tmp/radar.csv |
Samples by variety and grid |
Run them all at once with:
task ex_py
Or run one individually:
python examples/bar.py tmp/bar.csv tmp/bar.html
Marimo notebook (examples/notebook.py)
A marimo notebook that displays all six chart types as interactive
widgets. Each cell reads a CSV file from tmp/ and calls to_widget()
to render the chart.
marimo run examples/notebook.py
Selection test notebook (examples/test_selection.py)
A marimo notebook demonstrating click, shift-click, and box-select
interactions. Each chart is wrapped with mo.ui.anywidget() so that
selection changes trigger reactive cell updates.
marimo run examples/test_selection.py
JavaScript examples (js/examples/)
A standalone HTML page (example.html) that renders all six chart
types using the JavaScript library directly. The data is loaded
dynamically from CSV files via fetch(). A symlink
js/examples/tmp points to the project-level tmp/ directory.
To view the JavaScript examples with a dev server:
task ex_js
Then open the URL printed by the dev server in a browser.
Project structure
assets/ xkcd-script.ttf font file
bin/ build scripts (font_encode.py)
examples/ Python examples, SQL queries, marimo notebooks
js/src/ JavaScript chart source
Bar.js, Line.js, ... chart classes
config.js shared constants
widget.js anywidget entry point
index.js standalone library entry point
components/Tooltip.js tooltip component
utils/ shared helpers (axes, labels, legend, font, filter)
src/chart_xkcd/ Python package
bar.py, line.py, ... chart classes
charts.py base classes and validation
widget.py anywidget adapter (ChartWidget, to_widget)
renderer.py HTML rendering (render, to_html)
config.py positionType constants
main.py CLI entry point
static/ bundled JS (built artifact)
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file chart_xkcd-0.4.2.tar.gz.
File metadata
- Download URL: chart_xkcd-0.4.2.tar.gz
- Upload date:
- Size: 903.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
14f4d6f3cc7efcc0177c3cd29edb312da37cfeb3db871aff06d70a143a324b1a
|
|
| MD5 |
7147ac97ef2425dfe6f5866099545be1
|
|
| BLAKE2b-256 |
456a52319cb2271611a8479be957bff7284223ddfcf8b9da0f4fbc9685fd0a69
|
File details
Details for the file chart_xkcd-0.4.2-py3-none-any.whl.
File metadata
- Download URL: chart_xkcd-0.4.2-py3-none-any.whl
- Upload date:
- Size: 95.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
24676e59db5370eb93b6c47a7e13726b932c09528bb6ebfaf74a7faeda7d4df4
|
|
| MD5 |
e7af333756a8d6fbb6daaf1a89329b8e
|
|
| BLAKE2b-256 |
be47961f5664d538bf3844f2d21f27a11eb44db41c1a706076db13d58a06477e
|