Skip to content
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

Width argument to geom_errorbar not passed on when using stat_summary_bin #4647

Open
hummuscience opened this issue Oct 20, 2021 · 9 comments · May be fixed by #5970 or #5971
Open

Width argument to geom_errorbar not passed on when using stat_summary_bin #4647

hummuscience opened this issue Oct 20, 2021 · 9 comments · May be fixed by #5970 or #5971
Labels
bug an unexpected problem or unintended behavior layers 📈

Comments

@hummuscience
Copy link

When using stat_summary_bin and geom = "errorbar" the width argument used to set the width of the errorbars in geom_errorbar does not work.

The below code produces the same plots with different setting for width

Related to follwing StackOverflow issue: https://stackoverflow.com/questions/42418746/how-to-adjust-width-of-errorbar-created-with-stat-summary-bin

library(tidyverse)

iris %>%
  ggplot(aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  stat_summary_bin(geom = "errorbar")
#> No summary function supplied, defaulting to `mean_se()`
#> No summary function supplied, defaulting to `mean_se()`
#> No summary function supplied, defaulting to `mean_se()`

iris %>%
  ggplot(aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  stat_summary_bin(geom = "errorbar", width = 0.1)
#> No summary function supplied, defaulting to `mean_se()`
#> No summary function supplied, defaulting to `mean_se()`
#> No summary function supplied, defaulting to `mean_se()`

iris %>%
  ggplot(aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  stat_summary_bin(geom = "errorbar", width = 2)
#> No summary function supplied, defaulting to `mean_se()`
#> No summary function supplied, defaulting to `mean_se()`
#> No summary function supplied, defaulting to `mean_se()`

Created on 2021-10-20 by the reprex package (v2.0.1)

@thomasp85
Copy link
Member

Yeah, this is an unfortunate consequence when stats and geoms share an aesthetic or parameter name. Fixing this will be surprisingly difficult I'm afraid

@thomasp85 thomasp85 added bug an unexpected problem or unintended behavior layers 📈 labels Oct 28, 2021
@hummuscience
Copy link
Author

Is it because width can be used to set binwidth in stat_summary_bin? Or does width affect something else?

@thomasp85
Copy link
Member

hum... that was my thinking writing this, but now I'm not so sure 😬

I'll have to dig in a bit more when I sit down to fix the issue

@hummuscience
Copy link
Author

If it is any help, I could try to dig for the reason. I don't think that I am at the level of actually writing a fix, but maybe I could find out what is causing it...

@thomasp85
Copy link
Member

That is very welcome 🙏

@thomasp85
Copy link
Member

Ah, I can see where things run into each other. stat_summary_bin does not take a width paramater or aesthetic, but it does calculate one based on the given bins/binwidth argument (or its default). Since that is now present in the data given to geom_errorbar it takes precedence over the provided width parameter...

So, my initial hunch was correct, it was just a bit more complicated. I'm afraid we don't have a great solution for this at the moment. I'll keep this issue open to remind us to think about it

@teunbrand
Copy link
Collaborator

You can use after_stat() to work around this limitation.

library(ggplot2)

iris |>
  ggplot(aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  stat_summary_bin(
    aes(width = after_stat(1)),
    geom = "errorbar"
  )
#> No summary function supplied, defaulting to `mean_se()`
#> No summary function supplied, defaulting to `mean_se()`
#> No summary function supplied, defaulting to `mean_se()`

Created on 2024-03-28 with reprex v2.1.0

@teunbrand
Copy link
Collaborator

teunbrand commented Mar 28, 2024

Should a parameter width override the width column in the data? For basically any other aesthetic given as a parameter, say colour = "red", we override any colour variable passed through aes() or computed by the stat.

@teunbrand
Copy link
Collaborator

It is also a bit verbose the throw the warning about the summary function 3 times

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug an unexpected problem or unintended behavior layers 📈
Projects
None yet
3 participants