library(dplyr)
library(ggvis)
library(tidyr)
library(lubridate)
flights <- read.csv(url("http://jamessuleiman.com/mba676/assets/units/unit06/me_flights2.csv"))
If you just want to do counts, stacked is pretty easy…
f_wday <- flights %>% group_by(day = wday(FlightDate, label=TRUE)) %>%
mutate(delayed = ifelse(DepDelay > 0, "Delayed", "On Time"), value = 1)
f_wday %>% ggvis(~day, ~value, fill = ~delayed) %>% layer_bars()
As a part of whole you need to use an aggregated data frame:
f_wide <- f_wday %>% mutate(delayed = ifelse(DepDelay > 0, 1, 0)) %>%
summarize(delayed = sum(delayed) / n(), ontime = 1 - delayed) %>%
gather(status, percentage, -day)
f_wide %>% ggvis(~day, ~percentage, fill = ~status) %>% layer_bars
Horizontally is somewhat more difficult – you need to be explicit with the compute_stack.
f_wide %>%
ggvis(y = ~day, fill = ~status) %>%
compute_stack(stack_var = ~percentage, group_var = ~day) %>%
layer_rects(x = ~stack_lwr_, x2 = ~stack_upr_, height = band())