Skip to content

Default labs where geom when the aesthetic is in both the ggplot and geom_* call #5894

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
davidhodge931 opened this issue May 20, 2024 · 6 comments · Fixed by #5879
Closed
Labels
visual change 👩‍🎨 Rendering change that will affect look of output

Comments

@davidhodge931
Copy link

davidhodge931 commented May 20, 2024

Default labs are not created based on aesthetics in the geom when the aesthetic is in both the ggplot and geom_* call

library(tidyverse)
library(palmerpenguins)

penguins |> 
  ggplot(aes(x = flipper_length_mm, y = body_mass_g, colour = sex)) +
  geom_point(aes(x = bill_depth_mm, y = bill_length_mm, colour = species))
#> Warning: Removed 2 rows containing missing values or values outside the scale range
#> (`geom_point()`).

Created on 2024-05-20 with reprex v2.1.0

@davidhodge931 davidhodge931 changed the title default labs are not created based on aesthetics in the geom when the aesthetic is in both the ggplot and geom_* call default labs where geom when the aesthetic is in both the ggplot and geom_* call May 20, 2024
@davidhodge931 davidhodge931 changed the title default labs where geom when the aesthetic is in both the ggplot and geom_* call Default labs where geom when the aesthetic is in both the ggplot and geom_* call May 20, 2024
@teunbrand
Copy link
Collaborator

Should be fixed in the label refactoring in #5879.
OTOH, some people might expect the global aesthetics to overrule local aesthetics.

devtools::load_all("~/packages/ggplot2")
#> ℹ Loading ggplot2

palmerpenguins::penguins |> 
  ggplot(aes(x = flipper_length_mm, y = body_mass_g, colour = sex)) +
  geom_point(aes(x = bill_depth_mm, y = bill_length_mm, colour = species))
#> Warning: Removed 2 rows containing missing values or values outside the scale range
#> (`geom_point()`).

Created on 2024-05-20 with reprex v2.1.0

@teunbrand teunbrand added the visual change 👩‍🎨 Rendering change that will affect look of output label May 31, 2024
@yutannihilation
Copy link
Member

@teunbrand

OTOH, some people might expect the global aesthetics to overrule local aesthetics.

Sorry for a late question. I, more specifically, the gghighlight package, expected it. So, what's the recommendation for those people? Setting the label attribute?

devtools::load_all("~/GitHub/ggplot2/")
#> ℹ Loading ggplot2
library(gghighlight)

# The original labels should be kept
ggplot(mtcars, aes(wt, mpg, colour = factor(cyl))) +
  geom_point() +
  gghighlight(100 < disp, disp <= 300, use_group_by = FALSE)

Created on 2024-07-17 with reprex v2.1.0

@teunbrand
Copy link
Collaborator

That would work if you use plain symbols in aes(), but you could also use any other label setting mechanism like using labs() or scale_{x/y/colour}_*(name).

@yutannihilation
Copy link
Member

That would work if you use plain symbols in aes()

Ah, okay, it's not necessarily a plain symbol, so it seems I need to use labs(). I wanted to avoid constructing the labels by myself, but I think I can make it. Thanks for the hint!

@teunbrand
Copy link
Collaborator

Sorry if I have been unclear, I meant 'a NSE column name' when I said 'plain symbol'.
Given that the mappings give column names, label-attributes should work.

library(gghighlight)
#> Loading required package: ggplot2

# The original labels should be kept
p <- ggplot(mtcars, aes(wt, mpg, colour = factor(cyl))) +
  geom_point() +
  gghighlight(100 < disp, disp <= 300, use_group_by = FALSE)

p$layers[[1]]$mapping
#> Aesthetic mapping: 
#> * `x`      -> `highlight..........1`
#> * `y`      -> `highlight..........2`
#> * `colour` -> `highlight..........3`
#> * `fill`   -> NULL
#> * `group`  -> `highlight..........group`
colnames(p$layers[[1]]$data)
#> [1] "highlight..........1"     "highlight..........2"    
#> [3] "highlight..........3"     "highlight..........group"

Created on 2024-07-17 with reprex v2.1.1

@yutannihilation
Copy link
Member

Ah, I understand what you wrote. I was thinking if I can set the label attributes of the plot data, but, in this code for example, colour is an expression, not a variable. But, modifying a layer might be an option, thanks for the suggestion.

library(gghighlight)
#> Loading required package: ggplot2
p <- ggplot(mtcars, aes(wt, mpg, colour = factor(cyl))) +
  geom_point() +
  gghighlight(100 < disp, disp <= 300, use_group_by = FALSE)

p$mapping
#> Aesthetic mapping: 
#> * `x`      -> `wt`
#> * `y`      -> `mpg`
#> * `colour` -> `factor(cyl)`

Created on 2024-07-17 with reprex v2.1.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
visual change 👩‍🎨 Rendering change that will affect look of output
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants