- Added aesthetics for
Stairs
#573.
- Added
legend
keyword invisual
to allow overriding legend element attributes #570.
- Fixed lexicographic natural sorting of tuples (this would fall back to default sort order before) #568.
- Fixed markercolor in
ScatterLines
legends when it did not matchcolor
#567.
- Added ability to include layers in the legend without using scales by adding
visual(label = "some label")
#565.
- Fixed aesthetics of
errorbar
so that x and y stay labelled correctly when usingdirection = :x
#560. - Added ability to specify
title
,subtitle
andfootnotes
plus settings in thedraw
function #556. - Added
dodge_x
anddodge_y
keywords tomapping
that allow to dodge any plot types that haveAesX
orAesY
data #558.
- Added ability to return
ProcessedLayers
from transformations, thereby enabling multi-layer transformations, such as scatter plus errorbars #549. - Fixed bug where
mergesorted
applied on string vectors usedisless
instead of natural sort #553.
- Added
bar_labels
toBarPlot
's aesthetic mapping #544. - Added ability to hide legend or colorbar by passing, e.g.,
legend = (; show = false)
todraw
#547.
- Added
presorted
helper function to keep categorical data in the order encountered in the source table, instead of sorting it alphabetically #529. - Added
from_continuous
helper function which allows to sample continuous colormaps evenly to use them as categorical palettes without having to specify how many categories there are #541.
- Added
fillto
toBarPlot
aesthetics #535. - Fixed bug when giving
datalimits
ofdensity
as 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.
- Fixed incorrect x/y axis assignment for the
violin
plot type #528.
- Enable use of
LaTeXString
s andrich
text inrenamer
#525. - Fixed widths of boxplots with color groupings #524.
- Added back support for
Hist
,CrossBar
,ECDFPlot
andDensity
#522.
- Breaking: Columns with element types of
Union{Missing,T}
are not treated as categorical by default anymore, insteadT
decides if data is seen as categorical, continuous or geometrical. If you relied on numerical vectors withmissing
s being treated as categorical, you can use:columnname => nonnumeric
in themapping
instead. - Breaking:
AbstractString
categories 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
, thecategories
keyword or categorical arrays to sort your data differently if needed.
- Breaking: The
palette
keyword ofdraw
linking 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_mapping
defined 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:
Contour
andContourf
generally do not work anymore withvisual()
. Instead, thecontours()
andfilled_contours()
analyses should be used.Contour
can still be used with categorical colors, but not with continuous ones. - Breaking: All colormap properties for continuous color scales need to be passed via
scales
now, and not throughvisual
. This is to have central control over the scale as it can be used by multiplevisual
s 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
categories
keyword 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,
strokecolor
can work the same ascolor
did 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
mapping
with ascale(id_symbol)
. - Legend entries can be reordered using the
legend = (; order = ...)
option indraw
. Specific scales can opt out of the legend by passinglegend = false
inscales
. - Labels can now be anything that Makie supports, primarily
String
s,LaTeXString
s orrich
text. - Legend elements now usually reflect all attributes set in their corresponding
visual
. - Simple column vectors of data can now be passed directly to
mapping
without usingdata
first. Additionally, scalar values are accepted as a shortcut for columns with the same repeated value. - Columns from outside a table source in
data
can now be passed tomapping
by wrapping them in thedirect
function. Scalar values are accepted as a shortcut for columns with the same repeated value. For example, to create a label for columnsx
andy
from 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
sizerange
property for the respective scale inscales
.
- Added
paginate
for pagination of large facet plots.
- Added
choropleth
recipe to supersedegeodata
for geographical data.
- Support
level
inlinear
analysis for confidence interval. - Replaced tuples and named tuples in
Layer
andEntry
with dictionaries from Dictionaries.jl. - Split internal
Entry
type intoProcessedLayer
(to be used for analyses) andEntry
(to be used for plotting).
- Breaking: Default axis linking behavior has changed: now only axes corresponding to the same variable are linked. For consistency with
row
/col
,layout
will hide decorations of linked axes and span axis labels if appropriate. - Customizable legend and colorbar position and look.
- Customizable axis linking behavior.
- 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.
- Breaking: Removed deprecations for
style
andspec
(now onlymapping
andvisual
are allowed). - Breaking: Analyses now require parentheses (i.e.
linear()
instead oflinear
). - Breaking: Rename
layout_x
andlayout_y
tocol
androw
. - Breaking: Rename
wts
keyword argument toweights
. - Breaking:
categorical
has been replaced bynonnumeric
.