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())