# Changelog¶

## v0.7.1¶

(Not Yet Released)

## v0.7.0¶

(2020-06-05)

### API Changes¶

• Changed the default method of caculating bandwidth for all stats that use kernel density estimation. The affected stats are stat_density, stat_ydensity, and stat_sina. These stats can now work with groups that have a single unique value.

• Changed plotnine.scale.scale_colour_continuous to refer to the same scale as plotnine.scale.scale_color_continuous.

• Changed plotnine.scale.scale_color_cmap so the parameter cmap_name refers to the name of the color palette and name refers to the name of the scale. (GH371)

### New Features¶

• aes got an internal function reorder which makes it easy to change the ordering of a discrete variable according to some other variable/column.

• stat_smooth can now use formulae for linear models.

## v0.6.0¶

(2019-08-21)

### API Changes¶

• The draw parameter of plotnine.geoms.geom_map has been removed. Shapefiles should contain only one type of geometry and that is the geometry that is drawn.

• Ordinal (Ordered categorical) columns are now mapped to ordinal scales. This creates different plots.

• The default mapping for the computed aesthetic size of stat_sum has changed to 'stat(n)'. This also changes the default plot for geom_count.

### New Features¶

• geom_text gained the adjust_text parameter, and can now repel text.

• Added annotation_logticks.

• Added geom_sina

• Added scales for ordinal (ordered categorical) columns.

• geom_step gained the option mid for the direction parameter. The steps are taken mid-way between adjacent x values.

• Added annotation_stripes.

### Bug Fixes¶

• Fixed bug where facetting would fail if done on a plot with annotation(s) and one of the facetting columns was also a variable in the environment.

• Fixed bug where coord_flip would not flip geoms created by geom_rug (GH216).

• Fixed bug where plots with theme_xkcd cannot be saved twice (GH199)

• Fixed bug that made it impossible to map to columns with the same name as a calculated columns of the stat. (GH234)

• Fixed bug in geom_smooth that made it difficult to use it with stats other than stat_smooth. (GH242)

• Fixed bug in position_dodge where by bar plot could get thinner when facetting and useing preserve = 'single'. (GH224)

• Fixed bug in coord_trans where if the transformation reversed the original limits, the order in which the data was laid out remained unchanged. (GH253)

• Fixed bug in stat_count where float weights were rounded and lead to a wrong plot. (GH260)

• Fixed bug where one could not use the British spelling colour to rename a color scale. (GH264)

• Fixed bug in lims, xlim, and ylim where datetime and timedelta limits resulted in an error.

• Fixed bug where geom_rect could not be used with coord_trans. (GH256)

• Fixed bug where using free scales with facetting and flipping the coordinate axes could give unexpected results. (GH286)

• Fixed unwanted tick along the axis for versions of Matplotlib >= 3.1.0.

• Fixed geom_text not to error when using hjust and vjust. (GH287)

• Fixed bug where geom_abline geom_hline and geom_vline could give wrong results when used with coord_trans.

• Fixed bug where layers with only infinite values would lead to an exception if they were the first layer encountered when choosing a scale.

### Enhancements¶

• Legends are now plotted in a predictable order which dedends on how the plot is constructed.

• The spokes drawn by geom_spoke can now have a fixed angle.

• Aesthetics that share a scale (e.g. color and fill can have the same scale) get different guides if mapped to different columns.

• When the transform of a specialised (one that is not and identity scale) continuous scale is altered, the user is warned about a possible error in what they expect. (GH254, GH255)

• The method_args parameter in stat_smooth can now differentiate between arguments for initialising and those for fitting the smoothing model.

• position_nudge can now deal with more geoms e.g. geom_boxplot.

• The limits parameter of scale_x_discrete and

scale_y_discrete can now be a function.

• The width of the boxplot can now be set irrespective of the stat.

• The mid-point color of scale_color_distiller now matches that of the trainned data.

• The way in which layers are created has been refactored to give packages that that extend plotnine more flexibility in manipulating the layers.

• You can now specify one sided limits for coordinates. e.g. coord_cartesian(limits=(None, 10)).

• All the themeables have been lifted into the definition of theme so they can be suggested autocomplete.

## v0.5.1¶

(2018-10-17)

### Bug Fixes¶

• Changed the dependency for mizani to v0.5.2. This fixes an issue where facetting may create plots with missing items. (GH210)

## v0.5.0¶

(2018-10-16)

### API Changes¶

• Plotnine 0.5.0 only supports Python 3.5 and higher

• geopandas has been removed as a requirement for installation. Users of geom_map will have to install it separately. (GH178)

### Bug Fixes¶

• Fixed issue where with the subplots_adjust themeable could not be used to set the wspace and hspace Matplotlib subplot parameters. (GH185)

• Fixed in stat_bin where setting custom limits for the scale leads to an error. (GH189)

• Fixed issue interactive plots where the x & y coordinates of the mouse do not show. (GH187)

• Fixed bug in geom_abline where passing the mapping as a keyword parameter lead to a wrong plot. (GH196)

• Fixed issue where minor_breaks for tranformed scaled would have to be given in the transformed coordinates. Know they are given the data coordinates just like the major breaks.

### Enhancements¶

• For all geoms, with coord_cartesian float('inf') or np.inf are interpreted as the boundary of the plot panel.

• Discrete scales now show missing data (None and nan). This behaviour is controlled by the new na_translate option.

• The minor_breaks parameter for continuous scales can now be given as an integer. An integer is taken to controll the number of minor breaks between any set of major breaks.

## v0.4.0¶

2018-01-08

### API Changes¶

• Calculated aesthetics are accessed using the stat() function. The old method (double dots ..name..) still works.

• stat_qq calculates slightly different points for the theoretical quantiles.

• The scales (when set to free, free_x or free_y') parameter of facet_grid and facet_wrap assigns the same scale across the rows and columns.

### Bug Fixes¶

• Fixed issue where colorbars may chop off the colors at the limits of a scale.

• Fixed issue with creating fixed mappings to datetime and timedelta type values.(GH88)

• Fixed scale_x_datetime and scale_y_datetime to handle the intercepts along the axes (GH97).

• Fixed stat_bin and stat_bin_2d to properly handle the breaks parameter when used with a transforming scale.

• Fixed issue with x and y scales where the name of the scale was ignored when determining the axis titles. Now, the name parameter is specified, it is used as the title. (GH105)

• Fixed bug in discrete scales where a column could not be mapped to integer values. (GH108)

• Make it possible to hide the legend with theme(legend_position='none'). (GH119)

• Fixed issue in stat_summary_bin where some input values gave an error. (GH123)

• Fixed geom_ribbon to sort data before plotting. (GH127)

• Fixed IndexError in facet_grid when row/column variable has 1 unique value. (GH129)

• Fixed facet_grid when scale='free', scale='free_x' or scale='free_y', the panels share axes along the row or column.

• Fixed geom_boxplot so that user can create a boxplot by specifying all required aesthetics. (GH136)

• Fixed geom_violin to work when some groups are empty. (GH131)

• Fixed continuous scales to accept minor=None (GH120)

• Fixed bug for discrete position scales, where drop=False did not drop unused categories (GH139)

• Fixed bug in stat_ydensity that caused an exception when a panel had no data. (GH147)

• Fixed bug in coord_trans where coordinate transformation and facetting could fail with a KeyError. (GH151)

• Fixed bug that lead to a TypeError when aesthetic mappings to could be recognised as being groupable. It was easy to stumble on this bug when using geom_density. (GH165)

• Fixed bug in facet_wrap where some combination of parameters lead to unexpected panel arrangements. (GH163)

• Fixed bug where the legend text of colorbars could not be themed. (GH171)

## v0.3.0¶

(2017-11-08)

### API Changes¶

• geom_smooth gained an extra parameter legend_fill_ratio that control the area of the legend that is filled to indicate confidence intervals. (GH32)

• plotnine.ggplot.save() gained an extra parameter verbose. It no longer guesses when to print information and when not to.

• plotnine.ggplot.draw() gained an extra parameter return_ggplot.

• If the minor_breaks parameter of scales is a callable, it now expects one argument, the limits. Previously it accepted breaks and limits.

### New Features¶

• Added PlotnineAnimation for animations.

• Added watermark for watermarks.

• Added datetime scales for alpha, colour, fill and size aesthetics

### Enhancements¶

• Changed parameter settings for stat_smooth.

1. Default span=0.75 instead of 2/3

2. When using loess smoothing, the control parameter surface is only set to the value 'direct' if predictions will be made outside the data range.

• Better control of scale limits. You can now specify individual limits of a scale.

scale_y_continuous(limits=(0, None))
xlim(None, 100)


You can also use expand_limits()

• Low and high scale limits can now be expanded separately with different factors multiplicative and additive factors.

• The layer parameter show_legend can now accept a dict for finer grained control of which aesthetics to exclude in the legend.

• Infinite values are removed before statistical computations stats (GH40).

stats also gained new parameter na_rm, that controls whether missing values are removed before statistical computations.

• qplot() can now use the name and a Pandas series to label the scales of the aesthetics.

• You can now put stuff to add to a ggplot object into a list and add that that instead. No need to wrap the list around the internal class Layers.

lst = [geom_point(), geom_line()]
g = ggplot(df, aes('x', 'y'))
print(g + lst)


Using a list allows you to bundle up objects. I can be convenient when creating some complicated plots. See the Periodic Table Example.

• You can now use a dict (with manual scales) to map data values to aesthetics (GH169).

• You can now specify infinite coordinates with plotnine.geoms.geom_rect (GH166)

### Bug Fixes¶

• Fixed bug where facetting led to a reordering of the data. This would manifest as a bug for geoms where order was important. (GH26)

• Fix bug where facetting by a column whose name (eg. class) is a python keyword resulted in an exception. (GH28)

• Fix bug where y-axis scaling was calculated from the xlim argument.

• Fix bug where initialising geoms from stats, and positions from geoms, when passed as classes (e.g. stat_smooth(geom=geom_point), would fail.

• Fixed bug in plotnine.ggplot.save() where specifying the width and height would mess up the strip_text and spacing for the facetted plots. (GH44).

• Fixed bug in geom_abline, geom_hline and geom_vline where facetting on a column that is not mapped to an aesthetic fails. (GH48)

• Fixed bug in geom_text, the fontstyle parameter was being ignored.

• Fixed bug where boolean data was mapped to the same value on the coordinate axis. (GH57)

• Fixed bug in facet_grid where the scales sometimes has no effect. (GH58)

• Fixed bug in stat_boxplot where setting the width parameter caused an exception.

## v0.2.1¶

(2017-06-22)

• Fixed bug where manually setting the aesthetic fill=None or fill='None' could lead to a black fill instead of an empty fill.

• Fixed bug where computed aesthetics could not be used in larger statements. (GH7)

• Fixed bug in stat_summary where the you got an exception for some types of the x aesthetic values.

• Fixed bug where ggplot(data=df) resulted in an exception.

• Fixed missing axis ticks and labels for facet_wrap when the scales are allowed to vary (e.g scales='free') between the panels.

• Fixed bug in stat_density where changing the x limits lead to an exception (GH22)

## v0.2.0¶

(2017-05-18)

### API Changes¶

• geom_text now uses ha and va as parameter names for the horizontal and vertical alignment. This is what matplotlib users expect. The previous names hjust and vjust are silently accepted.

• Layers() can now be used to bundle up geoms and stats. This makes it easy to reuse geoms and stats or organise them in sensible bundles when making complex plots.

## v0.1.0¶

(2017-04-25)

First public release