Plots, VegaLite, Gadfly and Makie. What is the difference between the Julia visualization packages?

What are the main differences between these packages and how is the current state of each?
And, in your opinion, what is the future of data visualization in Julia Language?

4 Likes

I think a more fruitful question might be “what do I want to accomplish”?
If my goal is to do statistical plots, this makes certain plotting packages more appealing than others. So instead of asking what are all the capabilities of all graphics solutions I would ask which capabilities matter to me and go from there.

2 Likes

@PetrKryslUCSD Sorry for not asking a more specific question.
I need a package for statistical plots (histograms, scatter plots, density plots, etc.). And also for mathematical graph plots, for example: the graph of a trigonometric function.

My own biases: Simple math graphs with Gnuplot or PGFPlotsX or PlotlyJS. Stats with Vegalite.

2 Likes

My 2 cents: If you want to do rapid visualisation of statistical data (e.g. in a Jupyter notebook), you can’t go wrong with StatsPlots. If you want full control over layout and everything else and aim at publication quality plots, you might want to take some time learning Makie.

6 Likes

@fbanning Thanks for your reply. I was reading Makie’s documentation and I thought he was amazing!
But one question: Why doesn’t anyone recommend Gadfly?

haha makes me quite proud that makie is now recommended for layout heavy figures :slight_smile: a long way to get there…

Of course I have to support that statement, the only reason why I worked on the layout capabilities of Makie is because I thought most other packages fell short in that regard. One exception could be ProPlot in Python (which you could use via PyCall I guess), which also has quite a nice layout capability, at least the author seems to share my pain points. The observable workflow for interactive visualizations in Makie is also really nice. The not-nice thing about Makie is the long precompilation / using / time-to-first-plot latency. So if that’s the killer thing for you, one of the other packages will serve you better for now.

9 Likes

I recommend Gadfly! I think it produces beautiful plots, and I like the grammar of graphics style.

12 Likes

Another point in favor of VegaLite is that the package is available from many language. After learning to use VegaLite.jl for some time, I could now easily transfer the concepts and usage to a Python project (using altair).

1 Like

What makes Vegalite so nice for you? I have no experience with it.

I like Gadfly because it is pure Julia and therefore easy to run anywhere. Also, I think the plots look good. Biggest drawbacks are that some options are hard to find in the documentation and that development slowed down.

2 Likes

Sorry, I don’t have a lot of arguments. I like the esthetics and the documentation is very thorough.

3 Likes

which features do you need?

  • 3d? Makie or PlotlyJS (VegaLite and Gadfly limited)
  • save plots in high quality and formats accepted by journals (*pdf, *png, …)? PlotlyJS or VegaLite
  • …

To produce something like Gapminders 200 years that changed the world none is really at this level.

Edit: Sorry, I had to edit the link. Now it seems to work

3 Likes

Hmm, not sure what you wanted to link to, but I can’t find any pretty graphs there.

2 Likes

Sorry, I had to edit the link. It seems to work now (you need to click on the triangle below left of the plot to see the action).

2 Likes

I use mainly Gadfly, I like the syntax more, it’s more organized (no need to remember that many keywords) and composes very well. I usually do stuff like this (with more complex layers) :

line_layer(data) = layer(
    x = data.x, 
    y = data.y, 
    Geom.line
)
opt = ylabel -> (Guide.xlabel("x"), Guide.ylabel(ylabel))

data1 = [(x = rand(100), y = rand(100)) for i=1:3]
data2 = [(x = rand(100), y = rand(100)) for i=1:3]

p1 = plot(
    line_layer.(data1)...,
    opt("y1")...
)
p2 = plot(
    line_layer.(data2)...,
    opt("y2")...
)
vstack(p1, p2)

That said one big issue I have is that the axis in grids (hstack, vstack, …) aren’t aligned, which makes making complex plots difficult. It’s also lacking some features (double axis, heatmap isn’t that great, …) It’s true that its development doesn’t seem very active, it could use some more workforce.

5 Likes

For a super basic comparison and out of curiosity, I’ve taken a scatter plot and bar chart from the documentation of different libraries. Note that this neglects many things like the fact that fine-tuning would probably allow for “prettier” graphs. Also, it doesn’t say much about how easy users can change the appearance, but it is still nice to look at.

VegaLite.jl

image
image

Gadfly.jl

image
image

Makie


For PyPlot, GR and other library examples, see the documentation of Plots.jl backends.

5 Likes

Gadfly is also my favorite. I’m sure there’s a way to use Colors.jl to specify colors with the other libraries as well, but that’s an example of a nicety that comes with being a pure Julia library.
I’ve also never had an issue with getting it to work.
VegaLite has also been reliable, but I’ve had problems with Plots.jl backends like GR.
It’s been years since I’ve last been able to get Makie to work, and doing that required a custom build of Julia to statically link LLVM. using Makie is a reliable way to crash Julia (on my computers).

4 Likes

That’s not good… You could try CairoMakie which will not have those problems, but if you’re not making plots with complex layouts for publication you might be fine with your usual 2D plotting tools. It also supports Colors

5 Likes

The WGLMakie backend works for me too, only GLMakie does not.

1 Like

Scratch this. I like Makie.jl and AlgebraOfGraphics.jl more.

15 Likes