- fixes #61, by forcing the minimum y value to be 0 for
geom_bar
if identity statistics is being used.
aes
now not only accespts strings, but also numbers, which will also be wrapped in aFormulaNode
of kindfkVariable
. No need to manually create such a formula.- add new recipes:
rAutoColoredNeuralSpikes.nim
: example on how to create neural raster spike plotrCustomColoredNeuralSpikes.nim
: same
- add
scale_x/y_reverse
to reverse the x or y scales. Done by addingFilledScales
fieldsreversedX/Y
, which are set incollectScales
. If any scale is reversed, the plot will be reversed.
summarize
now works reliably on data frames, which have been grouped by multiple columns- fixes a few bugs regarding wrong length scales used
- fixed a possible assertion error, due to unsafe access of an `Option[T]` (wrong field checked in if)
- introduce
StyleLabel
to retain information about styles for discrete labels inFilledGeom.yieldData
. Allows to know which style belongs to which label of a discrete scale. - fix
assignBinFields
to actually use given argument instead ofresult
from caling scope - add theme fields to hide labels, ticks and tick labels
- add
theme_void
, an empty theme. No labels, ticks, tickLabels, grid lines, white background. - use
pretty(Value ...)
for children ofVObject
- do not collect text scales anymore. They’re not used in the post processing stage. Only care about column (note: this may change, if we want to incorporate the string widths / heights into the plot scales!)
- do not crash if no label is present in
handleLabels
yet - add ScaleKind for text:
scText
to not confuse text with x or y axes - plot layout now differs for themes without labels and ticks. Only 0.2 cm on LHS of plot instead of 2.5 cm
handleDiscreteTicks
now takes only labels instead of a fullScale
handleTicks
respectshideLabels
and allows custom number of ticks (to call it from elsewhere, e.g. gradients)handleTicks
can take a custom boundScale. Allows to call it for other uses.- only yield scales that show up as legends by
enumerateScalesByIds
iterator addIdentityData
during collection now preallocates space for data- add ridgeline plots; accessed by applying
ggridges
to a plot. Ridges are not really a geom, but rather a specific feature similar to facets. Essentially an aestheticyRidges
is added, by which is classified. Each labels gets its own ridge. In that ridge every normal kind of plot is allowed (including more classical ridgeline plots) - progress towards supporting –gc:arc. No more
deepCopy
in use. - add (not working yet)
scale_*_reverse
to reverse x and y scales. In principle it does work, but how to hand information to where its needed unclear (add toFilledScales
,GgPlot
, … ?) - add more recipes:
rAnnotatedHeatmap.nim
: example of a heatmap overlaid with textrMultiSubplots.nim
: an example on how to useginger
to combine two plots to one subplotrPeriodicTable.nim
: creating a periodic table as a plot!
- move
font
helper toggplot_utils
- remove spacing between multiple legends. Previously there was 1 cm of space if multiple legends were shown. That took too much space and wasn’t required imo.
- fix classification by multiple discrete scales
- fix issue for discrete scales, which caused index error in
getView
, when a position was moved viabinPosition
- add
width
,height
to scales, which are collected. This was simply missing. - add
geom_text
- add
font
field toGgStyle
object - update
rMultipleLegends
due to spacing between two legends - add recipes:
rSimpleGeomText.nim
rClassifiedGeomText.nim
rAnnotateUsingGeomText.nim
rAnnotateMaxValues.nim
- update
ginger
dependency tov0.1.17
Hotfix release for small regressions introduced in v0.2.18
- fixes the layout of plots discrete axes. Due to recent ginger changes the position of the ticks and tick labels was wrong.
- fixes the placement of
geom_tile
for discrete cases. - updates all plots with discrete axes
- finally fixes multiple legends. Now automatically evenly spaced and centered
- distances of legends / labels to legend are now fixed in absolute
units (thanks to fix in ginger
v0.1.15
) - fix distance of tick labels to ticks, now also in fixed absolute distances (that’s why every plot is updated)
- add
geom_tile
- update all plots due to ginger fixes / placement of tick labels
- most geoms now take an
alpha
argument to override the alpha offillColor
- if a fill color of a line is set, the line is now continued down to the x axis
geom_point
withpositoin = "stack"
now draw points aty = 0
geom_histogram/bar
now draw “empty” elements forposition = "stack"
(setlineWidth
to 0 to make them disappear)- y axes may now be discrete (previously only the x axis could be discrete)
- rewrites drawing code to have less duplication. For some kinds of plots this might (!) incur a tiny performance regression.
- refactors out code related to
- collection and filling of scales: ./src/ggplotnim/collect_and_scales.nim
- postprocessing of scales: ./src/ggplotnim/postprocess_scales.nim
- (most) drawing code: ./src/ggplotnim/ggplot_drawing.nim
- IMPORTANT: there was a bug in
seqmath.histogram
, which is used ingeom_histogram
/ ifstat = "bin"
is used. The bug caused wrong histogram calculations if and only if unequal bin widths were used. Equal bin widhts were fine. This was fixed inseqmath
v0.1.7
- add
geom_errorbar
for plots with error bars in x / y direction - add
geom_linerange
, which are either error bars without an orthogonal line at the end (not “T” shaped, “|” like) or just, well, line ranges. - slight performance increase for large datasets, due to avoiding running over data twice to determine min / max values.
- starts a changelog :)
formula.evaluate[T](node: FormulaNode, data: T): Value
is nowformula.reduce(node: FormulaNode, data: DataFrame): Value
. Generic usage is just clutter.reduce
makes the intent clearer and opens up the name for anevaluate
that returns a full vector- adds
formula.evaluate(node: FormulaNode, data: DataFrame): PersistentVector[Value]
. - The
Scale.col
field is nowFormulaNode
instead ofstring
. This allows for calculations on the DF to use for scales instead of only columns. aes()
is now generic and takes a mix ofstring | FormulaNode
to allow to apply formulas to the DF w/o intermediate calculations on the DF manually. E.g.aes(y = f{"yCol" * 2})
is now valid- improve performance for certain plots with many geoms
- add inplace variants for
select
,mutate
,transmute
(*Inplace
).