A declarative drawing API
Project description
Chalk is a declarative drawing library. The API draws heavy inspiration from Haskell's diagrams, Scala's doodle and Jeremy Gibbons's lecture notes on Functional Programming for Domain−Specific Languages.
The documentation is available at https://chalk-diagrams.github.io.
⚠️ The library is still very much work in progress and subject to change.
Installation
The library is available on PyPI as chalk-diagrams
and can be installed with pip
:
pip install git+https://github.com/chalk-diagrams/chalk/
On Debian (or Colab) you will need to install Cairo for PyCairo
sudo apt-get install libcairo2-dev
If you want to use the LaTeX extension, run:
pip install chalk-diagrams[latex]
For the LaTeX extension you might need to install pdf2svg
and texlive
;
on Debian these dependencies can be installed as follows:
sudo apt-get install pdf2svg texlive texlive-science texlive-latex-recommended texlive-latex-extra
Installation with Conda
You can install the library with conda from conda-forge
channel.
conda install -c conda-forge chalk-diagrams
Overview
Below we provide a brief introduction of the main functionality of the library.
These examples are available in the examples/intro.py
file.
We start by importing the colour
module and the diagrams
functions:
from colour import Color
from chalk import *
We also define some colors that will be shortly used:
papaya = Color("#ff9700")
blue = Color("#005FDB")
We can easily create basic shapes (the functions circle
, square
, triangle
) and style them with various attributes (the methodsfill_color
, line_color
, line_width
).
For example:
d = circle(1).fill_color(papaya)
The diagram can be saved to an image using the render
method:
d.render("examples/output/intro-01.png", height=64)
We can glue together two diagrams using the combinators atop
(or +
), beside
(or |
), above
(or /
).
For example:
circle(0.5).fill_color(papaya) | square(1).fill_color(blue)
which is equivalent to
circle(0.5).fill_color(papaya).beside(square(1).fill_color(blue))
This code produces the following image:
We also provide combinators for a list of diagrams:
hcat
for horizontal composition, vcat
for vertical composition.
For example:
hcat(circle(0.1 * i) for i in range(1, 6)).fill_color(blue)
We can use Python functions to build more intricate diagrams:
def sierpinski(n: int, size: int) -> Diagram:
if n <= 1:
return triangle(size)
else:
smaller = sierpinski(n - 1, size / 2)
return smaller.above(smaller.beside(smaller).center_xy())
d = sierpinski(5, 4).fill_color(papaya)
Gallery of examples
For more examples, please check the examples
folder;
their output is illustrated below:
squares.py |
logo.py |
escher_square_limit.py |
hilbert.py |
koch.py |
hex-variation.py |
lenet.py |
tensor.py |
hanoi.py |
tree.py |
lattice.py |
These scripts can be run as follows:
python examples/squares.py
Authors
Special thanks to:
- Sugato Ray, for his significant contributions and suggestions;
- Ionuț G. Stan, for providing many useful insights and comments.
Project details
Release history Release notifications | RSS feed
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
File details
Details for the file chalk_diagrams-0.2.2.tar.gz
.
File metadata
- Download URL: chalk_diagrams-0.2.2.tar.gz
- Upload date:
- Size: 37.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2c7ebebc4c09d00a27d91955d9294962fa0ea676b2a3d098ac3d22b3b6e70af0 |
|
MD5 | 67b46518ae4026f46b9e2d0e26d5da20 |
|
BLAKE2b-256 | f648ee3220b0d37dba0ff03aa719a66bd02248891fa62d491aab99a816c6f885 |
File details
Details for the file chalk_diagrams-0.2.2-py3-none-any.whl
.
File metadata
- Download URL: chalk_diagrams-0.2.2-py3-none-any.whl
- Upload date:
- Size: 44.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 06020b24d90759fe996fd19151f2dc04814c970b002bdfb83e047785729f85d6 |
|
MD5 | 85bc93a3a9d804711eccb386975f20d0 |
|
BLAKE2b-256 | 88e20bf40389cccf147df96c710cf9923ad83a2ab17dff52d8434321d93bdec4 |