|
1 | 1 | # ggplot2 (development version)
|
2 | 2 |
|
| 3 | +* `position_fill()` avoids stacking observations of zero (@teunbrand, #6338) |
| 4 | +* New `layer(layout)` argument to interact with facets (@teunbrand, #3062) |
| 5 | +* New `stat_connect()` to connect points via steps or other shapes |
| 6 | + (@teunbrand, #6228) |
| 7 | +* Fixed regression with incorrectly drawn gridlines when using `coord_flip()` |
| 8 | + (@teunbrand, #6293). |
| 9 | +* Deprecated functions and arguments prior to ggplot2 3.0.0 throw errors instead |
| 10 | + of warnings. |
| 11 | +* Functions and arguments that were soft-deprecated up to ggplot2 3.4.0 now |
| 12 | + throw warnings. |
| 13 | +* (internal) layer data can be attenuated with parameter attributes |
| 14 | + (@teunbrand, #3175). |
| 15 | +* Date scales silently coerce <POSIXct> to <Date> and datetime scales silently |
| 16 | + coerce <Date> to <POSIXct> (@laurabrianna, #3533) |
| 17 | +* New parameters for `geom_label()` (@teunbrand and @steveharoz, #5365): |
| 18 | + * The `linewidth` aesthetic is now applied and replaces the `label.size` |
| 19 | + argument. |
| 20 | + * The `linetype` aesthetic is now applied. |
| 21 | + * New `border.colour` argument to set the colour of borders. |
| 22 | + * New `text.colour` argument to set the colour of text. |
| 23 | +* New `element_point()` and `element_polygon()` that can be given to |
| 24 | + `theme(point, polygon)` as an extension point (@teunbrand, #6248). |
| 25 | +* Turned off fallback for `size` to `linewidth` translation in |
| 26 | + `geom_bar()`/`geom_col()` (#4848). |
| 27 | +* `coord_radial()` now displays no axis instead of throwing an error when |
| 28 | + a scale has no breaks (@teunbrand, #6271). |
| 29 | +* The `fatten` argument has been deprecated in `geom_boxplot()`, |
| 30 | + `geom_crossbar()` and `geom_pointrange()` (@teunbrand, #4881). |
| 31 | +* Axis labels are now preserved better when using `coord_sf(expand = TRUE)` and |
| 32 | + graticule lines are straight but do not meet the edge (@teunbrand, #2985). |
| 33 | +* Attempt to boost detail in `coord_polar()` and `coord_radial()` near the |
| 34 | + center (@teunbrand, #5023) |
| 35 | +* Scale names, guide titles and aesthetic labels can now accept functions |
| 36 | + (@teunbrand, #4313) |
| 37 | +* Binned scales with zero-width data expand the default limits by 0.1 |
| 38 | + (@teunbrand, #5066) |
| 39 | +* New default `geom_qq_line(geom = "abline")` for better clipping in the |
| 40 | + vertical direction. In addition, `slope` and `intercept` are new computed |
| 41 | + variables in `stat_qq_line()` (@teunbrand, #6087). |
| 42 | +* Position adjustments can now have auxiliary aesthetics (@teunbrand). |
| 43 | + * `position_nudge()` gains `nudge_x` and `nudge_y` aesthetics (#3026, #5445). |
| 44 | + * `position_dodge()` gains `order` aesthetic (#3022, #3345) |
| 45 | +* More stability for vctrs-based palettes (@teunbrand, #6117). |
| 46 | +* Fixed regression in `guide_bins(reverse = TRUE)` (@teunbrand, #6183). |
| 47 | +* New function family for setting parts of a theme. For example, you can now use |
| 48 | + `theme_sub_axis(line, text, ticks, ticks.length, line)` as a substitute for |
| 49 | + `theme(axis.line, axis.text, axis.ticks, axis.ticks.length, axis.line)`. This |
| 50 | + should allow slightly terser and more organised theme declarations |
| 51 | + (@teunbrand, #5301). |
| 52 | +* `scale_{x/y}_discrete(continuous.limits)` is a new argument to control the |
| 53 | + display range of discrete scales (@teunbrand, #4174, #6259). |
| 54 | +* `geom_ribbon()` now appropriately warns about, and removes, missing values |
| 55 | + (@teunbrand, #6243). |
| 56 | +* `guide_*()` can now accept two inside legend theme elements: |
| 57 | + `legend.position.inside` and `legend.justification.inside`, allowing inside |
| 58 | + legends to be placed at different positions. Only inside legends with the same |
| 59 | + position and justification will be merged (@Yunuuuu, #6210). |
| 60 | +* New stat: `stat_manual()` for arbitrary computations (@teunbrand, #3501) |
| 61 | +* Reversal of a dimension, typically 'x' or 'y', is now controlled by the |
| 62 | + `reverse` argument in `coord_cartesian()`, `coord_fixed()`, `coord_radial()` |
| 63 | + and `coord_sf()`. In `coord_radial()`, this replaces the older `direction` |
| 64 | + argument (#4021, @teunbrand). |
| 65 | +* `coord_radial()` displays minor gridlines now (@teunbrand). |
| 66 | +* (internal) `continuous_scale()` and `binned_scale()` sort the `limits` |
| 67 | + argument internally (@teunbrand). |
| 68 | +* Theme margins can have NA-units to inherit from parent elements. The new |
| 69 | + function `margin_part()` has NA-units as default (@teunbrand, #6115) |
| 70 | +* New `margin_auto()` specification for theme margins. |
| 71 | +* New argument `labs(dictionary)` to label based on variable name rather than |
| 72 | + based on aesthetic (@teunbrand, #5178) |
| 73 | +* Fixed bug in out-of-bounds binned breaks (@teunbrand, #6054) |
3 | 74 | * Binned guides now accept expressions as labels (@teunbrand, #6005)
|
4 | 75 | * (internal) `Scale$get_labels()` format expressions as lists.
|
5 | 76 | * In non-orthogonal coordinate systems (`coord_sf()`, `coord_polar()` and
|
|
24 | 95 | (@teunbrand, #4320)
|
25 | 96 | * `geom_boxplot()` gains additional arguments to style the colour, linetype and
|
26 | 97 | linewidths of the box, whiskers, median line and staples (@teunbrand, #5126)
|
| 98 | +* `geom_violin()` gains additional arguments to style the colour, linetype and |
| 99 | + linewidths of the quantiles, which replace the now-deprecated `draw_quantiles` |
| 100 | + argument (#5912). |
| 101 | +* (breaking) `geom_violin(quantiles)` now has actual quantiles based on |
| 102 | + the data, rather than inferred quantiles based on the computed density. The |
| 103 | + `quantiles` parameter that replaces `draw_quantiles` now belongs to |
| 104 | + `stat_ydensity()` instead of `geom_violin()` (@teunbrand, #4120). |
27 | 105 | * (internal) Using `after_scale()` in the `Geom*$default_aes()` field is now
|
28 | 106 | evaluated in the context of data (@teunbrand, #6135)
|
29 | 107 | * Fixed bug where binned scales wouldn't simultaneously accept transformations
|
|
175 | 253 | and (non-text) margins inherit from (@teunbrand, #5622).
|
176 | 254 | * `geom_ribbon()` can have varying `fill` or `alpha` in linear coordinate
|
177 | 255 | systems (@teunbrand, #4690).
|
178 |
| -* `geom_tile()` computes default widths and heights per panel instead of |
179 |
| - per layer (@teunbrand, #5740). |
| 256 | +* `geom_tile()` and `position_jitter()` computes default widths and heights |
| 257 | + per panel instead of per layer (@teunbrand, #5740, #3722). |
180 | 258 | * The `fill` of the `panel.border` theme setting is ignored and forced to be
|
181 | 259 | transparent (#5782).
|
182 | 260 | * `stat_align()` skips computation when there is only 1 group and therefore
|
|
206 | 284 | is setup once in total instead of once per group (@teunbrand, #5971)
|
207 | 285 | * `facet_grid(space = "free")` can now be combined with `coord_fixed()`
|
208 | 286 | (@teunbrand, #4584).
|
209 |
| -* `theme_classic()` now has black ticks and text instead of dark gray. In |
210 |
| - addition, `theme_classic()`'s axis line end is `"square"` (@teunbrand, #5978). |
| 287 | +* `theme_classic()` has the following changes (@teunbrand, #5978 & #6320): |
| 288 | + * Axis ticks are now black (`ink`-coloured) instead of dark gray. |
| 289 | + * Axis line ends are now `"square"`. |
| 290 | + * The panel grid is now blank at the `panel.grid` hierarchy level instead of |
| 291 | + the `panel.grid.major` and `panel.grid.minor` levels. |
211 | 292 | * {tibble} is now suggested instead of imported (@teunbrand, #5986)
|
212 | 293 | * The ellipsis argument is now checked in `fortify()`, `get_alt_text()`,
|
213 | 294 | `labs()` and several guides (@teunbrand, #3196).
|
214 | 295 | * `stat_summary_bin()` no longer ignores `width` parameter (@teunbrand, #4647).
|
215 |
| -* Added `keep.zeroes` argument to `stat_bin()` (@teunbrand, #3449) |
| 296 | +* Reintroduced `drop` argument to `stat_bin()` (@teunbrand, #3449) |
| 297 | +* (internal) removed barriers for using 2D structures as aesthetics |
| 298 | + (@teunbrand, #4189). |
216 | 299 | * `coord_sf()` no longer errors when dealing with empty graticules (@teunbrand, #6052)
|
217 | 300 | * Added `theme_transparent()` with transparent backgrounds (@topepo).
|
218 | 301 | * New theme elements `palette.{aes}.discrete` and `palette.{aes}.continuous`.
|
219 | 302 | Theme palettes replace palettes in scales where `palette = NULL`, which is
|
220 | 303 | the new default in many scales (@teunbrand, #4696).
|
| 304 | +* `guide_axis()` no longer reserves space for blank ticks |
| 305 | + (@teunbrand, #4722, #6069). |
| 306 | +* `geom_abline()` clips to the panel range in the vertical direction too |
| 307 | + (@teunbrand, #6086). |
| 308 | +* Added `panel.widths` and `panel.heights` to `theme()` (#5338, @teunbrand). |
| 309 | +* Standardised the calculation of `width`, which are now implemented as |
| 310 | + aesthetics (@teunbrand, #2800). |
| 311 | +* Stricter check on `register_theme_elements(element_tree)` (@teunbrand, #6162) |
| 312 | +* Added `weight` aesthetic for `stat_ellipse()` (@teunbrand, #5272) |
| 313 | +* Fixed a bug where the `guide_custom(order)` wasn't working (@teunbrand, #6195) |
| 314 | +* All binning stats now use the `boundary`/`center` parametrisation rather |
| 315 | + than `origin`, following in `stat_bin()`'s footsteps (@teunbrand). |
| 316 | +* `stat_summary_2d()` and `stat_bin_2d()` now deal with zero-range data |
| 317 | + more elegantly (@teunbrand, #6207). |
| 318 | +* Munching in `coord_polar()` and `coord_radial()` now adds more detail, |
| 319 | + particularly for data-points with a low radius near the center |
| 320 | + (@teunbrand, #5023). |
| 321 | +* All scales now expose the `aesthetics` parameter (@teunbrand, #5841) |
| 322 | +* Staged expressions are handled more gracefully if legends cannot resolve them |
| 323 | + (@teunbrand, #6264). |
| 324 | +* New `theme(legend.key.justification)` to control the alignment of legend keys |
| 325 | + (@teunbrand, #3669). |
| 326 | +* Added `scale_{x/y}_time(date_breaks, date_minor_breaks, date_labels)` |
| 327 | + (@teunbrand, #4335). |
| 328 | +* (internal) `legend.key.width` and `legend.key.height` calculations are no |
| 329 | + longer precomputed before guides are drawn (@teunbrand, #6339) |
| 330 | +* `ggsave()` can write a multi-page pdf file when provided with a list of plots |
| 331 | + (@teunbrand, #5093). |
| 332 | +* (internal) When `validate_subclass()` fails to find a class directly, it tries |
| 333 | + to retrieve the class via constructor functions (@teunbrand). |
| 334 | +* (internal) The ViewScale class has a `make_fixed_copy()` method to permit |
| 335 | + copying trained position scales (#3441). |
| 336 | +* `draw_key_rect()` replaces a `NA` fill by the `colour` aesthetic and |
| 337 | + `draw_key_polygon()` has 0 linewidth as internal default (@teunbrand, #5385). |
| 338 | +* Improved consistency of curve direction in `geom_curve()` (@teunbrand, #5069) |
| 339 | +* `linetype = NA` is now interpreted to mean 'no line' instead of raising errors |
| 340 | + (@teunbrand, #6269). |
| 341 | +* The default colour and fill scales have a new `palette` argument |
| 342 | + (@teunbrand, #6064). |
221 | 343 |
|
222 | 344 | # ggplot2 3.5.1
|
223 | 345 |
|
|
0 commit comments