Closed clauswilke closed 6 years ago
@hadley expressed concern about user-modifiable aesthetics. I can see how that could be an issue, if e.g. point_color
is sometimes converted into point_colour
and sometimes not, depending on which package is loaded.
An alternative approach might be to simply define a much larger set of aesthetic aliases in ggplot2. Real problems (such as #2674) arise only from the British/US spelling of color/colour, so all we'd have to do is define variants of colour
, e.g. point_colour
, line_colour
, frame_colour
, and maybe colour1
, colour2
, colour3
. We would not have to do the same for fill
, size
, shape
, etc. A second advantage of this approach is that it would steer package developers towards a unified set of aesthetics names.
Two more possibilities, brought up here:
Regardless of other pros and cons of these options, I think they both suffer from the same technical problem: Aesthetics are renamed in the aes()
function:
https://github.com/tidyverse/ggplot2/blob/c1908f192db6f5b5937f38ae1f2fc0410e4be7d5/R/aes.r#L77-L83
and aes()
is usually called early in plot construction, before themes or layers are defined. So it's not clear how aesthetic definitions in the theme or layer could be made available to aes()
in, e.g., the ggplot()
call.
Does renaming matter though? I think it’s important for historical reasons, but I don’t think it’s needed for new aesthetics.
It's all about the color/colour spelling differences. Currently color
will be renamed to colour
internally, but point_color
will not be renamed to point_colour
. No other nonstandard aesthetics need any support that isn't there yet. E.g., I can use point_size
today without any problems.
On further reflection, maybe the right solution is to just use a regular expression and replace any substring color
in the name of an aesthetic with colour
.
This old issue has been automatically locked. If you believe you have found a related problem, please file a new issue (with reprex) and link to this issue. https://reprex.tidyverse.org/
The current ggplot2 has support for aesthetic aliases, such as
color
instead ofcolour
. However, there are two places where this support could be improved, and they should be tackled at the same time, I think.1. Make aliases configurable
Currently the available aliases are hardcoded here: https://github.com/tidyverse/ggplot2/blob/eecc450f7f13c5144069705ef22feefe0b8f53f7/R/aes.r#L10-L23 I suspect most users are not even aware of some of those, e.g.
"srt" = "angle"
. More importantly, it is currently not possible to create new aliases. So, if a package creates a new aesthetic, e.g.point_colour
, it cannot create an aliaspoint_color
. The solution would be to provide functions that can add (and subtract?) aliases to (from) the default list. I would like to point out that this is conceptually similar to #2540 (user-defined theme elements), and similar techniques and user interfaces could be used in both cases.2. Apply aliases to scales as well
Aliases are not applied to
aesthetics
arguments of scales. This leads to confusing behavior such as the following:Created on 2018-05-21 by the reprex package (v0.2.0).
The solution is to rename aesthetics in the scales, just as it is done in the layers. There are only two places where this needs to happen, here: https://github.com/tidyverse/ggplot2/blob/eecc450f7f13c5144069705ef22feefe0b8f53f7/R/scale-.r#L554-L571 and here: https://github.com/tidyverse/ggplot2/blob/eecc450f7f13c5144069705ef22feefe0b8f53f7/R/scale-.r#L620-L632