orangejuice
orangejuice

Reputation: 11

Plotting grouped probabilities in R

I'm new to R and I'm trying to graph probability of flight delays by hour of day. Probability of flight delays would be calculated using a "Delays" column of 1's and 0's.

Here's what I have. I was trying to put a custom function into fun.y, but it doesn't seem like it's allowed.

library(ggplot2)    
ggplot(data = flights, aes(flights$HourOfDay, flights$ArrDelay)) + 
           stat_summary(fun.y = (sum(flights$Delay)/no_na_flights), geom = "bar") + 
           scale_x_discrete(limits=c(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25)) +
           ylim(0,500)

What's the best way to do this? Thanks in advance.

Upvotes: 1

Views: 261

Answers (1)

Teo
Teo

Reputation: 67

I am not sure if that is what you wanted, but I did it in the following way:

library(ggplot2)    
library(dplyr)
library(nycflights13)

probs <- flights %>%
  # Testing whether a delay occurred for departure or arrival
  mutate(Delay = dep_delay > 0 | arr_delay > 0) %>%
  # Grouping the data by hour
  group_by(hour) %>%
  # Calculating the proportion of delays for each hour
  summarize(Prob_Delay = sum(Delay, na.rm = TRUE) / n()) %>%
  ungroup()

theme_set(theme_bw())
ggplot(probs) +
  aes(x = hour,
      y = Prob_Delay) +
  geom_bar(stat = "identity") +
  scale_x_continuous(breaks = 0:24)

Which gives the following plot: Resulting plot

I think it is always better to do data manipulation outside ggplot, using for instance dplyr.

Upvotes: 1

Related Questions