Hi, to order your data you need to turn it into a factor. The simplest way to do this is with the help of the {forcats} package, for example with the function fct_reorder().
Or you can do it manually (the default is alphabetically):
factor(Bin, levels = c("2 in to 3 in", "3 in.", "4 in.", "5 in.", "10 in.", "Over 10 in")
Here is a reprex:
library(tidyverse)
d <- iris
boxplot_d <- d %>%
mutate(Bin = case_when(Petal.Length > 6.5 ~ 'Over 10 in.',
Petal.Length >= 6 ~ '10 in.',
Petal.Length >= 5 ~ '5 in.',
Petal.Length >= 4 ~ '4 in.',
Petal.Length >= 3 ~ '3 in.',
Petal.Length < 3 ~ '2 in. to 3 in.'))
p1 <- boxplot_d %>%
group_by(Bin) %>%
mutate(med = median(Petal.Length, na.rm = T)) %>%
ggplot(aes(x=fct_reorder(Bin, med), y=Sepal.Length)) +
geom_boxplot(color = "black", alpha = 0.2)
p1

p2 <- boxplot_d %>%
mutate(Bin = factor(Bin, levels = c("2 in. to 3 in.", "3 in.", "4 in.", "5 in.", "10 in.", "Over 10 in."))) %>%
ggplot(aes(x=Bin, y=Sepal.Length)) +
geom_boxplot(color = "black", alpha = 0.2)
p2

Created on 2020-07-15 by the reprex package (v0.3.0)