Changelog
Unreleased
v0.11.9 - 2025-10-10
- Improved error message when two layers with incompatible continuous data are combined #692.
v0.11.8 - 2025-10-09
- Improved handling of all-missing subgroups in some cases #689.
v0.11.7 - 2025-08-26
- Fixed a bug where adding a layer without
layoutmapping could result inlayoutfacets that should not have been visible at all #683.
v0.11.6 - 2025-08-19
- Remove accidentally left in
@showmacro #682.
v0.11.5 - 2025-08-19
Always treat
layout,row,colandgroupmappings as categorical to simplify common scenarios where grouping information is stored as integers #681.Make
mapping(key = (:col1, :col2))work automatically, equivalent to(:col1, :col2) => tuple#681.
v0.11.4 - 2025-08-15
Bumped julia compat to
1.10to match Makie going forward.Added the experimental
draw_to_specfunction. This can be used as an alternative todrawto create a Makie.SpecApi spec that can be updated interactively using observables #609.
v0.11.3 - 2025-06-24
- Added the ability to set
scale,ticksandtickformatfor continuous X, Y and Z scales via thescalesoptions which allows to set these in multi-scale facet scenarios #675.
v0.11.2 - 2025-06-23
Added compatibility for Makie 0.24 #674.
Added the
show_aestheticsfunction which can be used to print information about the aesthetic mappings supported for a given Makie plot type #673.
v0.11.1 - 2025-06-20
- Added support for Makie's new
TextLabelrecipe #671.
v0.11.0 - 2025-06-16
- Breaking Added Makie 0.23 compat. As Makie 0.23 split up
ArrowsinArrows2DandArrows3D,visual(Arrows2D)needs to be specified explicitly now in AlgebraOfGraphics. AsArrows2Dplots polygon shapes now and not a mixture of scatters and lines, the categoricalarrowheadmarker aesthetic had to be removed #666.
v0.10.9 - 2025-08-27
- Backport #683: Fixed a bug where adding a layer without layout mapping could result in layout facets that should not have been visible at all #684.
v0.10.8 - 2025-06-06
- Added support for Makie's new
Annotationrecipe #663.
v0.10.7 - 2025-05-27
- Fixed facet labels in paginated plots with a
Layoutscale in which categories were also relabeled using thecategories = pairsmechanism #661.
v0.10.6 - 2025-05-21
- If available, column metadata with the key
"label"will be used instead of the column name for determining a mapping's label #660.
v0.10.5 - 2025-05-14
Added a new
AesLineWidthaesthetic forLines,ScatterLines,HLinesandVLines#656.Added the
linestyleaesthetic toHLinesandVLines#656.Added handling for the new
directionkeyword ofBandto the aesthetics forBand. Also added adirectionkeyword to the internalLinesFillrecipe which usesBandand now allows to useAlgebraOfGraphics.density() * visual(direction = :y)#655.
v0.10.4 - 2025-04-22
Any attribute can now be used with a
=> verbatimmapping, not just those that are registered aesthetics for the used plot type. This makes it possible to use array-valued attributes which are sliced correctly using facet groupings, unlike attributes passed viavisual#652.Fixed bug with
mappingwithoutdatawhen passingarr => forvalue => f#651.
v0.10.3 - 2025-04-11
- Fixed breakage due to change of internal function in Makie 0.22.3 #646.
v0.10.2 - 2025-03-31
- Revert accidental docstring changes #638.
v0.10.1 - 2025-03-31
Changed default limits of categorical axes such that all categories are always visible and widthless plots are not squished into the borders #636.
Added better error messages for the common case of failing to construct single element NamedTuples in calls like
draw(axis = (key = value))#630.Fixed bug when color or markersize mappings had singular limits by expanding the limits to
(0, v),(-v, 0)or(0, 1)#634.
v0.10.0 - 2025-03-30
Breaking: The
colorbar!function now returns aVector{Colorbar}with zero or more entries. Before it would returnUnion{Nothing,Colorbar}, but now it's possible to draw more than one colorbar if there are multiple colorscales #628.Breaking:
filled_contoursdoes not create a legend by default but a colorbar. The colorbar can be disabled again by setting, e.g.,scales(Color = (; colorbar = false))#628.Breaking: Changed the behavior of the
from_continuouspalette in combination with a scale consisting ofBins. Colors will now be sampled relative to the positions of their bins' midpoints, meaning that smaller bins that lie closer together have more similar colors. The previous behavior with colors sampled evenly can be regained by usingfrom_continuous(cmap; relative = false)#628.Added the ability to display a colorbar for categorical color scales. The colorbar normally consists of evenly spaced, labelled sections, one for each category. In the special case that the data values of the categorical scale are of type
Bin, the colorbar displays each bin's color at the correct numerical positions #628.Added the
clippedfunction which is primarily meant to set highclip and lowclip colors on top of categorical color palettes, for use with categorical scales withBins if those bins extend to plus/minus infinity #628.
v0.9.7 - 2025-03-28
Added
wrappedconvenience function for theLayoutscale palette which allows to cap either rows or columns and change layout direction #625.Replaced unnecessary
show_labelskeyword forRow,ColandLayoutscales withFixed hiding of duplicate axis labels in unlinked layouts of either only col or only row #623.
v0.9.6 - 2025-03-26
Added support for input data with units attached, either through Unitful.jl or DynamicQuantities.jl extensions, available from Julia 1.9 on #619.
The provisional
MarkerSizetick calculation method is replaced with Makie's default tick finderWilkinsonTicks. Ticks and tickformat can be changed using the newticksandtickformatscale options #621.Added
plottypeargument tohistogramto allow for different plot types #591.
v0.9.5 - 2025-03-14
- Added
mergeable(layer.plottype, layer.primary)function, intended for extension by third-party packages that define recipes #592.
v0.9.4 - 2025-03-08
- Added internal copy of the Palmer Penguins dataset to AoG to reduce friction in the intro tutorials, accessible via the
AlgebraOfGraphics.penguins()function #613.
v0.9.3 - 2025-02-12
- Fixed use of
from_continuouswith colormap specifications like(colormap, alpha)#603.
v0.9.2 - 2025-02-03
- Fixed
data(...) * mapping(col => func => label => scale)label-extraction bug #596.
v0.9.1 - 2025-01-31
- Fixed passing
axiskeyword todraw(::Pagination, ...)#595.
v0.9.0 - 2025-01-30
- Breaking:
paginatenow splits facet plots into pages after fitting scales and not before #593. This means that, e.g., categorical color mappings are consistent across pages where before each page could have a different mapping if some groups were not represented on a given page. This change also makes pagination work with the split X and Y scales feature enabled by version 0.8.14.paginate's return type changes fromPaginatedLayerstoPaginationbecause no layers are stored in that type anymore. The interface to usePaginationwithdrawand other functions doesn't change compared toPaginatedLayers.paginatenow also accepts an optional second positional argument which are the scales that are normally passed todrawwhen not paginating, but which must be available prior to pagination to fit all scales accordingly.
v0.8.14 - 2025-01-16
Added automatic
alphaforwarding to all legend elements which will have an effect from Makie 0.22.1 on #588.Added the ability to use multiple different X and Y scales within one facet layout. The requirement is that not more than one X and Y scale is used per facet.
Row,ColandLayoutscales got the ability to setshow_labels = falseinscales. Also added thezerolayerfunction which can be used as a basis to build up the required mappings iteratively #586.Increased compat to Makie 0.22 and GeometryBasics 0.5 #587.
Increased compat to Colors 0.13 #589.
v0.8.13 - 2024-10-21
- Added aesthetics for
Stairs#573.
v0.8.12 - 2024-10-07
- Added
legendkeyword invisualto allow overriding legend element attributes #570.
v0.8.11 - 2024-09-25
- Fixed lexicographic natural sorting of tuples (this would fall back to default sort order before) #568.
v0.8.10 - 2024-09-24
- Fixed markercolor in
ScatterLineslegends when it did not matchcolor#567.
v0.8.9 - 2024-09-24
- Added ability to include layers in the legend without using scales by adding
visual(label = "some label")#565.
v0.8.8 - 2024-09-17
Fixed aesthetics of
errorbarso that x and y stay labelled correctly when usingdirection = :x#560.Added ability to specify
title,subtitleandfootnotesplus settings in thedrawfunction #556.Added
dodge_xanddodge_ykeywords tomappingthat allow to dodge any plot types that haveAesXorAesYdata #558.
v0.8.7 - 2024-09-06
Added ability to return
ProcessedLayersfrom transformations, thereby enabling multi-layer transformations, such as scatter plus errorbars #549.Fixed bug where
mergesortedapplied on string vectors usedislessinstead of natural sort #553.
v0.8.6 - 2024-09-02
Added
bar_labelstoBarPlot's aesthetic mapping #544.Added ability to hide legend or colorbar by passing, e.g.,
legend = (; show = false)todraw#547.
v0.8.5 - 2024-08-27
Added
presortedhelper function to keep categorical data in the order encountered in the source table, instead of sorting it alphabetically #529.Added
from_continuoushelper function which allows to sample continuous colormaps evenly to use them as categorical palettes without having to specify how many categories there are #541.
v0.8.4 - 2024-08-26
Added
filltotoBarPlotaesthetics #535.Fixed bug when giving
datalimitsofdensityas a (low, high) tuple #536.Fixed bug where facet-local continuous scale limits were used instead of the globally merged ones, possibly leading to mismatches between data and legend #539.
v0.8.3 - 2024-08-23
- Fixed incorrect x/y axis assignment for the
violinplot type #528.
v0.8.2 - 2024-08-21
Enable use of
LaTeXStrings andrichtext inrenamer#525.Fixed widths of boxplots with color groupings #524.
v0.8.1 - 2024-08-20
- Added back support for
Hist,CrossBar,ECDFPlotandDensity#522.
v0.8.0 - 2024-07-26
Breaking: Columns with element types of
Union{Missing,T}are not treated as categorical by default anymore, insteadTdecides if data is seen as categorical, continuous or geometrical. If you relied on numerical vectors withmissings being treated as categorical, you can use:columnname => nonnumericin themappinginstead.Breaking:
AbstractStringcategories are now sorted with natural sort order by default. This means that where you got["1", "10", "2"]before, you now get["1", "2", "10"]. You can usesorter, thecategorieskeyword or categorical arrays to sort your data differently if needed.
v0.7.0 - 2024-07-16
Breaking: The
palettekeyword ofdrawlinking palettes to keyword arguments was removed. Instead, palettes need to be passed to specific scales likedraw(..., scales(Color = (; palette = :Set1_3)))Breaking: All recipes need to have the new function
aesthetic_mappingdefined for all sets of positional arguments that should be supported, as can be seen insrc/aesthetics.jl. This breaks usage of all custom recipes. Additionally, not all Makie plots have been ported to the new system yet. If you encounter missing plots, or missing attributes of already ported plots, please open an issue.Breaking: All custom recipes that should be displayed in a legend, need to have
legend_elements(P, attributes, scale_args)defined as can be seen insrc/guides/legend.jl. AlgebraOfGraphics cannot use the same default mechanism as Makie, which can create a legend from an existing plot, because AlgebraOfGraphics needs to create the legend before the plot is instantiated.Breaking: Pregrouped data cannot be passed anymore to the plain
mapping(...)without anydata(tabular). Instead, you should usepregrouped(...)which is a shortcut fordata(Pregrouped()) * mapping(...).Breaking:
ContourandContourfgenerally do not work anymore withvisual(). Instead, thecontours()andfilled_contours()analyses should be used.Contourcan still be used with categorical colors, but not with continuous ones.Breaking: All colormap properties for continuous color scales need to be passed via
scalesnow, and not throughvisual. This is to have central control over the scale as it can be used by multiplevisuals simultaneously.Horizontal barplots, violins, errorbars, rangebars and other plot types that have two different orientations work correctly now. Axis labels switch accordingly when the orientation is changed.
Plotting functions whose positional arguments don't correspond to X, Y, Z work correctly now. For example,
HLines(1 => Y) orrangebars(1 => X, 2 => Y, 3 => Y).It is possible to add categories beyond those present in the data with the
categorieskeyword within a scale's settings. It is also possible to reorder or otherwise transform the existing categories by passing a function tocategories.The supported attributes are not limited anymore to a specific set of names, for example,
strokecolorcan work the same ascolordid before, and the two can share a scale via their shared aesthetic type.There can be multiple scales of the same aesthetic now. This allows to have separate legends for different plot types using the same aesthetics. Scale separation works by pairing a variable in
mappingwith ascale(id_symbol).Legend entries can be reordered using the
legend = (; order = ...)option indraw. Specific scales can opt out of the legend by passinglegend = falseinscales.Labels can now be anything that Makie supports, primarily
Strings,LaTeXStrings orrichtext.Legend elements now usually reflect all attributes set in their corresponding
visual.Simple column vectors of data can now be passed directly to
mappingwithout usingdatafirst. Additionally, scalar values are accepted as a shortcut for columns with the same repeated value.Columns from outside a table source in
datacan now be passed tomappingby wrapping them in thedirectfunction. Scalar values are accepted as a shortcut for columns with the same repeated value. For example, to create a label for columnsxandyfrom a dataframe passed todata, one could now domapping(:x, :y, color = direct("label"))without having to create a column full of"label"strings first.The numbers at which categorical values are plotted on x and y axis can now be changed via
scales(X = (; palette = [1, 2, 4]))or similar.Continuous marker size scales can now be shown in the legend. Numerical values are proportional to area and not diameter now, which makes more sense with respect to human perception. The min and max marker size can be set using the
sizerangeproperty for the respective scale inscales.
v0.6.11 - 2022-08-08
- Added
paginatefor pagination of large facet plots.
v0.6.8 - 2022-06-14
- Added
choroplethrecipe to supersedegeodatafor geographical data.
v0.6.1 - 2022-01-28
Support
levelinlinearanalysis for confidence interval.Replaced tuples and named tuples in
LayerandEntrywith dictionaries from Dictionaries.jl.Split internal
Entrytype intoProcessedLayer(to be used for analyses) andEntry(to be used for plotting).
v0.6.0 - 2021-10-24
Breaking: Default axis linking behavior has changed: now only axes corresponding to the same variable are linked. For consistency with
row/col,layoutwill hide decorations of linked axes and span axis labels if appropriate.Customizable legend and colorbar position and look.
Customizable axis linking behavior.
v0.5 - 2021-08-05
Breaking:
Axis(ae)has been replaced byae.axis.Breaking:
Legend(fg)has been replaced bylegend!(fg)andcolorbar!(fg).legend!andcolorbar!API allows for custom legend placement.
v0.4 - 2021-05-21
Breaking: Removed deprecations for
styleandspec(now onlymappingandvisualare allowed).Breaking: Analyses now require parentheses (i.e.
linear()instead oflinear).Breaking: Rename
layout_xandlayout_ytocolandrow.Breaking: Rename
wtskeyword argument toweights.Breaking:
categoricalhas been replaced bynonnumeric.