I'm creating a stacked horizontal bar chart. I can't seem to figure out how to order the legend so that blue is the top row and red is the bottom row while keeping the correct order in the bar chart. Here is my code:
library(tidyverse)
dat <- structure(list(prop_count = structure(6:1, .Label = c("Comparison Fail",
"Both Fail", "Bison Fail",
"Slower", "Indeterminant",
"Faster"), class = "factor"),
n = c(58L, 129L, 8L, 4L, 9L, 1L),
total = c(209, 209, 209, 209, 209, 209),
prop = c(0.277511961722488, 0.617224880382775,
0.0382775119617225, 0.0191387559808612,
0.0430622009569378, 0.00478468899521531),
pct_text = c("27.8%", "61.7%", "3.8%", "1.9%", "4.3%", "0.5%"),
plot_text = c("27.8% (58)", "61.7% (129)", "3.8% (8)", "1.9% (4)", "4.3% (9)", "0.5% (1)"),
rolling_prop = c(0.277511961722488, 0.894736842105263,
0.933014354066986, 0.952153110047847, 0.995215311004785, 1),
x_coord = c(0.138755980861244, 0.586124401913876, 0.913875598086124,
0.942583732057416, 0.973684210526316, 0.997607655502392)),
class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, -6L))
dat
#> # A tibble: 6 x 8
#> prop_count n total prop pct_text plot_text rolling_prop x_coord
#> <fct> <int> <dbl> <dbl> <chr> <chr> <dbl> <dbl>
#> 1 Faster 58 209 0.278 27.8% 27.8% (5… 0.278 0.139
#> 2 Indeterminant 129 209 0.617 61.7% 61.7% (1… 0.895 0.586
#> 3 Slower 8 209 0.0383 3.8% 3.8% (8) 0.933 0.914
#> 4 Bison Fail 4 209 0.0191 1.9% 1.9% (4) 0.952 0.943
#> 5 Both Fail 9 209 0.0431 4.3% 4.3% (9) 0.995 0.974
#> 6 Comparison F… 1 209 0.00478 0.5% 0.5% (1) 1 0.998
plot_prop_bar <- function(dat){
run_colors <- RColorBrewer::brewer.pal(n = 3, name = "Blues")
failed_colors <- c("darkred", "red3", "red2")
dat %>%
ggplot(aes(x = "1", y = prop, fill = prop_count)) +
geom_bar(stat = "identity", position = position_stack(),
width = .3) +
coord_flip() +
scale_y_continuous(labels = scales::percent) +
scale_fill_manual(values = c(failed_colors, run_colors)) +
guides(fill = guide_legend(reverse = TRUE)) +
labs(x = "Assessments", y = "Proportion (Count)") +
theme(aspect.ratio = 1/3,
legend.position = "bottom",
legend.title = element_blank(),
axis.text.y = element_blank(),
axis.title = element_text(size = 15, face = "bold", color= "grey25"),
axis.text = element_text(size = 13),
legend.text = element_text(size = 14, face = "bold", color ="grey25"),
panel.grid.minor = element_blank())
}
plot_prop_bar(dat)
The desired output would be having the legend structured as so:
Faster Indeterminate Slower
Bison Fail Both Fail Comparison Fail