I mistakenly thought the following code would produce multiple vertical boxplots, grouped by the binned wt variable. Instead it produces a single vertical boxplot (with a warning that the "orientation is not uniquely specified"):
library(ggplot2)
mtcars |>
ggplot(aes(wt, mpg)) +
geom_boxplot() +
scale_x_binned()
Another user had the same mistaken impression: #4211. In that issue, a ggplot2 author said "Since x is continuous, even after it's binned, it cannot be a grouping variable."
I also asked Claude Opus 4.6 about this, and it had the same misunderstanding as I did, incorrectly saying "geom_boxplot() recognizes the binned scale and automatically creates one boxplot per bin."
I request that the documentation mention that when you use scale_x_binned(), the x variable remains a continuous variable -- it is not converted to a factor as I had thought. Likewise of course for scale_y_binned().
I think it would also be helpful if the documentation mentioned a correct way to achieve the binned boxplot that I wanted, using either base R's cut() or ggplot2's cut_interval()/cut_number()/cut_width(). E.g.,
mtcars |>
ggplot(aes(cut(wt, 3), mpg)) +
geom_boxplot()

I mistakenly thought the following code would produce multiple vertical boxplots, grouped by the binned
wtvariable. Instead it produces a single vertical boxplot (with a warning that the "orientation is not uniquely specified"):Another user had the same mistaken impression: #4211. In that issue, a ggplot2 author said "Since
xis continuous, even after it's binned, it cannot be a grouping variable."I also asked Claude Opus 4.6 about this, and it had the same misunderstanding as I did, incorrectly saying "
geom_boxplot()recognizes the binned scale and automatically creates one boxplot per bin."I request that the documentation mention that when you use
scale_x_binned(), thexvariable remains a continuous variable -- it is not converted to a factor as I had thought. Likewise of course forscale_y_binned().I think it would also be helpful if the documentation mentioned a correct way to achieve the binned boxplot that I wanted, using either base R's
cut()or ggplot2'scut_interval()/cut_number()/cut_width(). E.g.,