I'm working on automating a report my department makes annually. It requires writing a lot of boiler plate for a ggplot2 plot, and then adding some other indicators manually. I'd like to break the code up into smaller module so that maintaining and editing the code is not a huge hassle. I figure if I can generate the plot using only geoms and stat_summary, that would be a huge help.
I've included a reprex to generate the plot I need. It requires faceting a histogram, plotting a vertical line at the median, and including some text to highlight the median.
Is it possible to recreate this plot using only geoms and stat_summary? If so, how can I go about doing that? I've made a first go of it here, but am stuck on the geom_labeling of the median (as shown in the reprex).
d %>%
ggplot(aes(metric))+
geom_histogram()+
stat_summary(aes(x = 0, xintercept = stat(y), y = metric),
fun = median, geom = "vline", colour = "red")+
facet_wrap(~classification)
Reprex for my problem below:
library(tidyverse)
#> Warning: package 'tibble' was built under R version 3.6.2
d = tibble::tribble(
~classification, ~metric,
"Scientist", 7,
"Member", 2,
"Scientist", 19,
"Scientist", 44,
"Scientist", 76,
"Researcher", 21,
"Member", 2,
"Researcher", 38,
"Member", 1,
"Member", 4,
"Scientist", 40,
"Scientist", 20,
"Researcher", 5,
"Member", 13,
"Scientist", 84,
"Member", 9,
"Member", 5,
"Member", 1,
"Member", 9,
"Researcher", 8,
"Scientist", 39,
"Member", 6,
"Researcher", 39,
"Member", 3,
"Researcher", 10,
"Researcher", 8,
"Researcher", 32,
"Scientist", 56,
"Member", 12,
"Member", 14,
"Researcher", 39,
"Member", 2,
"Member", 4,
"Member", 2,
"Researcher", 17,
"Member", 5,
"Member", 10,
"Scientist", 40,
"Researcher", 30,
"Researcher", 5,
"Researcher", 5,
"Member", 1,
"Scientist", 23,
"Researcher", 9,
"Member", 22,
"Scientist", 54,
"Scientist", 12,
"Researcher", 30,
"Member", 3,
"Member", 2,
"Member", 18,
"Member", 1,
"Researcher", 35,
"Member", 5,
"Member", 11,
"Researcher", 10,
"Member", 1,
"Researcher", 9,
"Member", 3,
"Researcher", 10,
"Member", 6,
"Scientist", 16,
"Member", 8,
"Researcher", 12,
"Member", 2,
"Member", 10,
"Scientist", 40,
"Researcher", 29,
"Scientist", 34,
"Scientist", 27,
"Researcher", 13,
"Researcher", 17,
"Researcher", 12,
"Scientist", 18,
"Researcher", 7,
"Member", 2,
"Scientist", 19,
"Researcher", 8,
"Researcher", 14,
"Researcher", 31,
"Scientist", 50,
"Researcher", 9,
"Scientist", 14,
"Member", 3,
"Member", 8,
"Scientist", 47,
"Researcher", 20,
"Scientist", 19,
"Member", 20,
"Member", 6,
"Researcher", 36,
"Member", 8,
"Researcher", 10,
"Member", 8,
"Researcher", 5,
"Member", 8,
"Scientist", 42,
"Researcher", 31,
"Researcher", 22,
"Researcher", 10,
"Researcher", 57,
"Scientist", 19,
"Scientist", 76,
"Member", 10,
"Scientist", 79,
"Member", 60,
"Researcher", 22,
"Researcher", 14,
"Researcher", 32,
"Member", 2,
"Member", 5,
"Member", 0,
"Scientist", 59,
"Researcher", 4,
"Member", 5,
"Scientist", 27,
"Scientist", 32,
"Member", 7,
"Researcher", 18,
"Member", 3,
"Researcher", 5,
"Scientist", 24,
"Member", 5,
"Researcher", 10,
"Researcher", 28,
"Member", 9,
"Member", 12,
"Scientist", 12,
"Researcher", 2,
"Researcher", 7,
"Member", 13,
"Member", 2,
"Member", 17,
"Scientist", 32,
"Member", 18,
"Researcher", 12,
"Scientist", 43,
"Member", 3,
"Researcher", 6,
"Researcher", 15,
"Scientist", 21,
"Member", 4,
"Researcher", 23
)
d %>%
group_by(classification) %>%
mutate(class_med = median(metric)) %>%
ggplot(aes(metric))+
geom_histogram()+
geom_vline(aes(xintercept = class_med))+
geom_text(aes(x = class_med, y = 10, label = glue::glue('Median: {class_med}')), vjust = 'top', angle = 90)+
facet_grid(~classification)
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Created on 2020-04-01 by the reprex package (v0.3.0)