Skip to content

Instantly share code, notes, and snippets.

@MokeEire
Created October 30, 2021 04:01
Show Gist options
  • Save MokeEire/18517b7ab53bc7122dc6dcf47c785fd9 to your computer and use it in GitHub Desktop.
Save MokeEire/18517b7ab53bc7122dc6dcf47c785fd9 to your computer and use it in GitHub Desktop.
Visualizing Google Maps Trip Durations
tibble::tribble(~departure_time, ~duration_min, ~duration_max,
"9:00am", lubridate::dminutes(65), dminutes(100),
#"9:15am", lubridate::dminutes(70), dminutes(100),
"9:30am", lubridate::dminutes(70), dminutes(110),
#"9:45am", lubridate::dminutes(70), dminutes(110),
"10:00am", lubridate::dminutes(75), dminutes(130),
#"10:15am", lubridate::dminutes(75), dminutes(130),
"10:30am", lubridate::dminutes(80), dminutes(130),
#"10:45am", lubridate::dminutes(80), dminutes(140),
"11:00am", lubridate::dminutes(80), dminutes(140),
"11:30am", lubridate::dminutes(80), dminutes(140),
"12:00pm", lubridate::dminutes(85), dminutes(140),
"12:30pm", lubridate::dminutes(85), dminutes(140),
"1:00pm", lubridate::dminutes(85), dminutes(140),
"1:30pm", lubridate::dminutes(85), dminutes(140),
"2:00pm", lubridate::dminutes(85), dminutes(140)) %>%
mutate(departure = ymd_hm(paste(today()+days(1), departure_time))) %>%
rowwise() %>%
mutate(duration_mean = dseconds(mean(c_across(contains("duration")))),
duration_sd = dseconds(sd(c_across(contains("duration")))),
arrival_min = departure+duration_min,
arrival_max = departure+duration_max,
arrival_mean = departure+duration_mean) %>%
ggplot(., aes(x = departure, xend = arrival_mean,
y = departure, yend = departure))+
geom_segment(colour = my_col_pal[6], size = 2.5, alpha = .7)+
geom_errorbarh(aes(xmin = arrival_min, xmax = arrival_max), size = 1, height = 500, colour = my_col_pal[3])+
geom_text(aes(x = arrival_mean, y = departure+minutes(7),
label = str_c(scales::time_format("%I:%M%p")(arrival_min), scales::time_format("%I:%M%p")(arrival_max), sep = " - ")))+
scale_y_time(name = "Departure time",labels = scales::label_time("%I:%M%p"),
breaks = scales::breaks_width("30 min"))+
scale_x_time(name = "Departure time",labels = scales::label_time("%I:%M%p"),
breaks = scales::breaks_width("30 min"))+
labs(title = "Trip duration, by departure time",
subtitle = "Based on departure between 9:00am and 2:00pm")+
theme_minimal(base_size = 18)+
theme(panel.grid.major.y = element_blank(), axis.title.x.bottom = element_text(margin = margin(t = 15)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment