Makie, a modern and fast plotting library for Julia
makie.org
makie.org
Unfortunately, as with Plots, the documentation is lacking. The basic tutorial does a good job introducing the aspects of the package at a high level, but the fact that some parts of the documentation uses functions/structs that don't have docstrings in examples makes it very hard to build on the examples in these cases.
I get it, I can do anything with Makie, and most things that I want to do work amazingly. But my code for a single figure can get huge because it's all so low level. See, for example, the Legend documentation[1].
[1]: https://docs.makie.org/stable/examples/blocks/legend/index.h...
This is an easy way for newcomers to help out, by the way, just give feedback on how starting out with the library went and what the main roadblocks were. The better we understand them, the more we can improve them.
Although Julia is my favorite PL by far, it's sometimes shocking how easily the Julia community sidesteps traditional programming values. Often this turns out to be a good thing, but the above issue is surely not a good example. I'd very much prefer to leave the work of packaging all those to the Archlinux maintainers.
EDIT: to be clear, this is more of a Julia-wide issue than a Makie issue. Or partly an issue with some of the Julia packages that Makie depends on. But Makie is perhaps the worst offender among the popular packages (transitively).
Lastly, if you want use system versions of C/C++ packages, you can do so using the preference system (see https://docs.binarybuilder.org/stable/jll/#Non-dev'ed-JLL-pa.... This isn't the default because it would make package installation a lot more annoying, but for deployment it very well may be what you want to do.
By the way, we get very few installation issues nowadays. They usually have to do with either graphics drivers on Linux, or because people have somehow messed with their library load paths and pull in the wrong dylibs. From a maintainer's perspective it's nice not having to worry about all that too much.
The fact of the matter is just that tonnes of bugs, incompatibilities, permission problems, and bad installation experiences every Linux user is intimately familiar with, often occur because package code has no control over which versions or whatever of system-level dependencies like Xorg, Fontconfi, Cairo, etc. are already installed. This also makes it much much easier for package authors to write code which works on multiple OSs without being experts on the details of all those OSs.
Now, if there was no way around this, then you might have a point, but users always can opt-out of binary artifacts like that and point julia to their system libraries instead of the default vendoring of binary artifacts[1]. I think this is the right way to do it. Experts who want to get involved in the nitty gritty details of this stuff and who are also equipped to debug and deal with failures, can opt into using their system libraries, and the rest of us can pay some hard drive space and get a better out-of-the-box experience.
______________________________
[1]: https://pkgdocs.julialang.org/v1/artifacts/#Overriding-artif...
1. both Julialang.org and Juliahub.com run Julia as far as I understand
2. even if your premise were true, it wouldn't be acceptable for the Julia project to condone pwning of Julia users
Sorry, I’m missing something, what security concerns are you referring to?
On my system, I obviously have to trust the Archlinux project not to serve me malware. When using Julia, I additionally have to trust the Julia project not to serve me malware. (See also: Python, Node, etc.) Obviously: less trust is better for security, ideally almost all installed software would be signed by Archlinux maintainers.
For comparison, the situation is kind of similar for Apple users; but on Windows, trust is extremely watered-down anyway (with or without Julia or Python etc.).
Who said that? As far as I know, it was always intended as a general purpose language, and in my opinion, it’s already a pretty good one (and rapidly getting better), except for the fact that the library ecosystem is still limited in some areas.
> The fact of the matter is just that tonnes of bugs, incompatibilities, permission problems, and bad installation experiences every Linux user is intimately familiar with, often occur because package code has no control over which versions or whatever of system-level dependencies like Xorg, Fontconfi, Cairo, etc. are already installed.
I can tell you I had orders of magnitude more issues with inferior (and I have yet to encounter one which is anywhere close to a system package manager) language package managers. The main issue that one might encounter (especially with super stable packages like Cairo or fontconfig), is that the package one wants to install uses some feature of the most cutting edge release and the system has an older release.
The consideration of not always using the latest and greatest and considering only stable releases seems to have completely gone missing and people just argue to install everything via virtual environments or docker containers. So we end up with tons of different versions of the same library all over the place.
Regarding Julia being not public facing and security being not an issue, that someone else mentioned somewhere else down the thread, this package builds interactive dashboards. That's pretty public facing to me.
If you've ever tried to install CUDA related packages from a poorly configured Python environment you'll have encountered this issue. On the vast majority of machines if you want to use CUDA.jl you just add it as a dependency.
There's a reason much of Julia's audience uses things like Spack or even static dependencies in their non-Julia code. If you just want to get work done fussing with PATH issues or the right version of CMake/gcc/LLVM-OMP etc etc can take hours.
Once you've gotten the work done, and you know it will load on most users computers, you're ready to deploy. Then just add an Overrides.toml to your environment.
From the other side, just like websites there is a barrier caused by "please install W, X, Y, Z dependencies" vs "Pkg.add("GLMakie")"
And Linux is particularly a nightmare when it comes to graphical things.
As I said in the previous post, I hardly ever have issues with my system packages. Helping people set up an environment to develop cython code for windows on the other hand is an absolute nightmare.
Try it out today: install Julia and https://julialang.org/downloads and in the Julia REPL run:
]add GLMakie
using GLMakie
scatter(1:4)
PS. Thanks to the Makie team for the shoutout to my corner plot package in the ecosystem section!
I am hoping they provide a declarative API that emulates Gadfly more closely. Gadfly is great for simple statistics, sort of a Julia equivalent to ggplot2.
http://www.stochasticlifestyle.com/summary-of-julia-plotting-packages/
Useful, because the wealth of choices confuses people.I stick with Plots.jl because of the recipe system. This is Plots’ secret weapon. If you create a package with its own data types, you can include instructions telling Plots how to visualize them. The user then need simply type
plot(custom_type; etc.)
to get the custom visualization. And the package need not include Plots as a dependency for this to work. This is only one of the things the recipe system can do.As a side note, package extensions in Julia 1.9 mean that any package can now in principle extend Makie without directly depending on it. That should remove one of the big blockers for adoption, as admittedly, Makie is a heavy dependency to take on.
Traditionally, time to first plot has been awful in Julia. I remember using about 30 seconds back in 2018 to render my first Gadfly image. How is Makie doing on this front?
julia> @time using GLMakie
4.954254 seconds (9.99 M allocations: 617.151 MiB, 7.81% gc time, 0.58% compilation time: 39% of which was recompilation)
julia> @time display(scatter(1:4)) 0.780343 seconds (672.09 k allocations: 51.171 MiB, 2.08% gc time, 63.66% compilation time)1.10:
julia> @time using GLMakie
3.350991 seconds (3.62 M allocations: 224.447 MiB, 5.41% gc time, 0.55% compilation time)
julia> @time display(scatter(1:4)) 0.799333 seconds (410.41 k allocations: 39.615 MiB, 2.36% gc time, 76.37% compilation time)
1.9:julia> @time using GLMakie
8.004230 seconds (10.56 M allocations: 643.198 MiB, 5.43% gc time, 0.49% compilation time: 47% of which was recompilation)
julia> @time display(scatter(1:4)) 1.096839 seconds (681.36 k allocations: 53.541 MiB, 2.42% gc time, 74.83% compilation time)For small things, interop with R is good, so one can defer things to R packages and get access to a great set of functionality.
What do you mean by that? AFAICT for the most part Julia is already like the best that Jax could ever hope to be — since there is language level support for JIT compilation, gradients, etc — given how well libraries compose without having to pick different incompatible subsets of the language.
Now I agree that Julia, with its JIT, is well positioned to do all this. But I don’t think it does.
I’m curious to get perspectives on what remains to be done to solve the missing piece, and what are the biggest challenges to overcome (assuming one gets access to the appropriate low level APIs on top of the hardware — like OpenAI’s Triton).
I would really prefer to use Julia, I actually dislike Python, but it's unrealistic to implement large architectures in Flux. It is buggy, lots of gradient calculations are unreliable.
See some discussion here for instance: https://kidger.site/thoughts/jax-vs-julia
I’m not using Julia, so I really don’t know about the library, but it seems like it has a very strong community
Also, does Cairo support all the features? I thought Cairo only supports 2D graphics, but I see several 3D style graphics in the demos.
Works fine for me, specially given I can leverage Makie when I wanted to tweak some stuff.
My biased view as a coauthor of Makie is that Makie's model is cool because you have a much easier time to combine low-level tinkering with high-level descriptive plots this way. I don't know if you've ever tried hacking the ggplot data structures for special use cases but they are more complex or inscrutable than in Makie, I would say.
Of course, ggplot2 has an amazing and mature ecosystem around it, our ecosystem will need time to fill gap after gap.
Every plotting library has something to offer, there are so many choices to make when building one that you can't cover everything. I envy the pure javascript libraries a little for their easy embedding in websites. But when you already do data work in Julia, especially with custom types and such, it's nice not having to move across a language barrier, and instead make use of Julia's multiple dispatch some more by using a native plotting library.
https://arxiv.org/abs/2207.07998
Both Vega and Echarts are covered, among others.
> In particular, do not sexualize the term "Julia" or any other aspects of the project. While "Julia" is a female name in many parts of the world, the programming language is not a person and does not have a gender.
(I know when I'm going to make cheesy jokes, but don't always stop myself like I should :)