- The package itself
- Functions for drawing random mandalas and scribbles
Why I implement this package?
Using D3.js via Raku is a good answer of the question “How to do data-driven visualizations with Raku?”
I used to (or tried to use) the alternatives outlined in the following sub-sections.
The package “SVG::Plot” is a good illustration that a Raku visualization system can be build “from scratch”, but it is way too much work to develop “SVG::Plot” to have all features needed for informative plots. (Various plot labels, grid lines, etc.)
One of the best features of “SVG::Plot” is that it is supported “out of the box” by the Jupyter Raku kernel [BD1].
I have attempted to install the package “Chart::Gnuplot” a few times on my computer without success. Some people from the Raku community claim it is useful.
Its main advantage is that “it can be used anywhere.” Occasionally, I find it very useful, but it is just a crutch, not a real plotting solution.
For example, it is hard to have informative time series plotted with “Text::Plot”. In support of that statement see this time series plot done with Mathematica for the number of IRC Raku channel posts per week in the last three years (by certain known posters):
That is why!
When I do data analysis I want to be able to:
- Make nice and informative plots
- Use concise plot specifications
- Quickly do the required setup
- Claim easy reproducibility and portability of the related documents
Here is an example bubble plot made in Jupyter:
Why I did not implement this a year ago?
I do not like Jupyter much, and I mostly stay away from it. That is why, 1.5 years ago when I read the code of “Jupyter::Kernel” I did not try to comprehend the magics. (I was interested in sand-boxing Raku.)
Refactoring via re-implementation in Python
Here is a bar chart example:
Random mandalas and scribbles
Implementing the corresponding functions required to:
- Have optional axes specification
The refactoring for 2. was required in order to have multiple plots in one Jupyter cell. Also, it was fairly involved, although, it is “just” for gluing the main, core plotting parts.
I wanted to do as much as possible on the Raku side:
- The random points generation and “arrangement” is done in Raku
- The plotting is done with D3.js
Remark: The algorithms for drawing, say, Bezier curves through the random points are far from trivial and D3.js does this very nicely.
Here is an example of random mandala generation:
Here is an example of random scribbles generation:
For interactive examples, see the video “Random mandalas generation (with D3.js via Raku)”.
Some “leftover” remarks
- My Jupyter setup is “local” on my laptop. I have tried to use Raku in cloud setups a few times without much success.
- I think there are some issues with the ZMQ connections between Raku’s “Jupyter::Kernel” and “the big” Jupyter framework. Observing those difficulties and making reproducible bug reports is not easy.
- If more people use Raku with Jupyter that would help or induce reliability improvements.
[AAv2] Anton Antonov, “Random mandalas generation (with D3.js via Raku)”, (2022), Anton Antonov’s channel at YouTube.