# \[ANN\] AlgebraOfGraphics v0.10 (and v0.9 & v0.8)

**URL:** <https://discourse.julialang.org/t/ann-algebraofgraphics-v0-10-and-v0-9-v0-8/127511>\
**Category:** Package Announcements\
**Created:** [March 30, 2025, 12:45pm UTC](https://discourse.julialang.org/t/ann-algebraofgraphics-v0-10-and-v0-9-v0-8/127511 "2025-03-30T12:45:16Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![jules](https://avatars.discourse-cdn.com/v4/letter/j/41988e/32.png) [@jules](https://discourse.julialang.org/u/jules)\
**Post date:** [March 30, 2025, 12:45pm UTC](https://discourse.julialang.org/t/ann-algebraofgraphics-v0-10-and-v0-9-v0-8/127511/1 "2025-03-30T12:45:16Z")

</div>

I noticed I didn’t make posts for the last two versions either, so I’m going to catch up a bit here. If you have tried AoG more than a year ago and found it lacking for your needs, maybe now’s a good time to have another look at it.

I’m just going backwards in time, picking some more salient changes along the [changelog](https://aog.makie.org/v0.10.0/changelog)

* * *

v0.10 adds the ability to have multiple colorbars for the same figure, and the ability to represent categorical color scales with colorbars as well, which is by default used for the `Bin` scale that `filled_contours` produces:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/6/b/6b9b04d7685debda9b214e4ad1d35a3d758ac374.png)

The `wrapped` palette function gives more control over the shape that `layout` produces:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/b/8/b8807fb9358b4b57e1795e4d757dfc515f59aded.png)

There’s now support for units via Unitful.jl or DynamicQuantities.jl:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/e/7/e7bec2f792362580234d14dc4f908432631b7805.png)

Histograms can be easily drawn in stair form

 ![image](https://global.discourse-cdn.com/julialang/original/3X/b/b/bb89e08bc43c8344f0f736cb3163780d2a5804c4.png)

The `mergeable` function was refactored so that SwarmMakie can correctly draw swarm plots with AoG

 ![image](https://global.discourse-cdn.com/julialang/original/3X/9/e/9e00bd51e4e5331dcb6ca5a3e6923df1b797a1f6.png)

Pagination was refactored such that all scales are resolved before pagination. Therefore colors are now consistent across pages, note how the two pages here share the same legend even though not every category exists on each page:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/5/e/5e3f1fd888f23141fcd8d9c137c5b4736cc83c2d.png)

Multiple X and Y scales can now be used within one plot, as long as no facet uses more than one of each

 ![image](https://global.discourse-cdn.com/julialang/original/3X/0/a/0a4a63d2fa74680873df336335c1ebc917263758.png)

Plots can simply be labelled without having a scale, by adding `visual(label = ...)`:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/0/2/020108ddba9105dbac88c31b26a7a01a04f49fcb.png)

Figure options allow easy setting of title, subtitle and footnotes without needing to use Makie layouting directly:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/e/6/e6ebd958e50d0bd473f276b9eaf2b7a700548c33.png)

The generic `dodge_x` and `dodge_y` mappings allow dodging all plot types by modifying their input data, this allows for the common “barplot + errorbar” scenario, for example:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/1/7/177fe0a7d320c470b6174fcf1163352f749181f2.png)

The `from_continuous` helper makes it easier to use continuous colormaps for categorical plots:

```julia
using AlgebraOfGraphics
using CairoMakie

spec = data((; x = 1:10, y = 1:10, z = 'A':'J')) *
    mapping(:x, :y, color = :z) *
    visual(BarPlot)

f = Figure()
fg1 = draw!(f[1, 1], spec, scales(Color = (; palette = :viridis)))
legend!(f[1, 2], fg1)
fg2 = draw!(f[1, 3], spec, scales(Color = (; palette = from_continuous(:viridis))))
legend!(f[1, 4], fg2)
f

```

 ![image](https://global.discourse-cdn.com/julialang/original/3X/f/c/fcccd0f0f5ea85d5e4fa8e4040c85099635673a4.png)

Strings are sorted in natural sort order, so a 10 comes after a 9 if it appears in a string, not like here, where the 10 comes between 1 and 2

 ![image](https://global.discourse-cdn.com/julialang/original/3X/8/e/8e69acd69706b56ca146457b2c5083c8e6eb6565.png)

And, finally, all the way back since v0.8, `missing`s do not cause data to be interpreted as categorical anymore. Instead, they are converted to NaN in the plotting primitives, like Makie does it.

That’s all for now, happy plotting!

---

<div class="post-metadata">

**Author:** ![e3c6](https://avatars.discourse-cdn.com/v4/letter/e/e79b87/32.png) [@e3c6](https://discourse.julialang.org/u/e3c6)\
**Post date:** [March 30, 2025, 1:16pm UTC](https://discourse.julialang.org/t/ann-algebraofgraphics-v0-10-and-v0-9-v0-8/127511/2 "2025-03-30T13:16:37Z")

</div>

Thanks for the awesome release !

> [@jules](#):
>
> … picking some more salient changes along the [changelog](https://aog.makie.org/stable/changelog):

The changelog link is broken. Gives 404 on my end.

---

<div class="post-metadata">

**Author:** ![jules](https://avatars.discourse-cdn.com/v4/letter/j/41988e/32.png) [@jules](https://discourse.julialang.org/u/jules)\
**Post date:** [March 30, 2025, 1:22pm UTC](https://discourse.julialang.org/t/ann-algebraofgraphics-v0-10-and-v0-9-v0-8/127511/3 "2025-03-30T13:22:59Z")

</div>

Thanks, that’s weird but I replaced it with a versioned link now

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [March 30, 2025, 2:34pm UTC](https://discourse.julialang.org/t/ann-algebraofgraphics-v0-10-and-v0-9-v0-8/127511/4 "2025-03-30T14:34:35Z")

</div>

Unit support would be super welcome in Makie.jl itself too.

---

<div class="post-metadata">

**Author:** ![George9000](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/george9000/32/23619_2.png) [@George9000](https://discourse.julialang.org/u/George9000)\
**Post date:** [March 30, 2025, 6:33pm UTC](https://discourse.julialang.org/t/ann-algebraofgraphics-v0-10-and-v0-9-v0-8/127511/5 "2025-03-30T18:33:05Z")

</div>

Amazing! Thank you.

---

<div class="post-metadata">

**Author:** ![jules](https://avatars.discourse-cdn.com/v4/letter/j/41988e/32.png) [@jules](https://discourse.julialang.org/u/jules)\
**Post date:** [March 31, 2025, 7:05am UTC](https://discourse.julialang.org/t/ann-algebraofgraphics-v0-10-and-v0-9-v0-8/127511/6 "2025-03-31T07:05:07Z")

</div>

Unit support in Makie already exists, it just currently works a bit differently because the unit labels go into the ticks. Maybe going into the axis label can be something to configure in the future, though.

---

<div class="post-metadata">

**Author:** ![juliohm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juliohm/32/215266_2.png) [@juliohm](https://discourse.julialang.org/u/juliohm)\
**Post date:** [March 31, 2025, 9:23am UTC](https://discourse.julialang.org/t/ann-algebraofgraphics-v0-10-and-v0-9-v0-8/127511/7 "2025-03-31T09:23:16Z")

</div>

There are issues with various plots when it comes to unit support, and I remember opening some of them. I will cc’you on github when I find them.

---

<div class="post-metadata">

**Author:** ![jules](https://avatars.discourse-cdn.com/v4/letter/j/41988e/32.png) [@jules](https://discourse.julialang.org/u/jules)\
**Post date:** [March 31, 2025, 9:26am UTC](https://discourse.julialang.org/t/ann-algebraofgraphics-v0-10-and-v0-9-v0-8/127511/8 "2025-03-31T09:26:39Z")

</div>

Your comment sounded like you thought there was no unit support at all, I’m aware of the issues, no need to cc me 🙂

---

<div class="post-metadata">

**Author:** ![pkofod](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pkofod/32/2179_2.png) [@pkofod](https://discourse.julialang.org/u/pkofod)\
**Post date:** [April 1, 2025, 7:01am UTC](https://discourse.julialang.org/t/ann-algebraofgraphics-v0-10-and-v0-9-v0-8/127511/9 "2025-04-01T07:01:39Z")

</div>

Awesome work! Really appreciate all the excellent improvements, AlgebraOfGraphics is such a joy to work with after all the recent work that has gone into it. It was good before, but so much better now.
