使用 ggplot2 创建子图

Create subplots with ggplot2

所以我需要使用 hflights 包并制作每个工作日的子图以显示飞机的延误(取消的航班除外)。问题是我无法同时重现 x 轴和 y 轴(x:月份和 y:延迟分钟)。我尝试使用 facet_wrap 和 facet_grid,但我对这些功能不熟悉,因为不经常使用 ggplot2。

现在因为你没有 post 代码让我们假设你已经保存了一个图,该图将所有内容都绘制在 a 下的一个图中。

a + facet_grid(rows = vars(weekday))

("weekday"是工作日所在的列名,如果命名不同则替换它)

如果这不是您要搜索的内容,如果您能 post 一些代码就太好了...

假设您要显示 ArrDelay,

hflights %>% 
  filter(Cancelled!=1) %>% 
  ggplot(aes(x=as.factor(Month), y=mean(ArrDelay,na.rm=T)))+
  geom_col()+
  labs(x='Month',y='Mean arrival Delay')+
  facet_wrap(~DayOfWeek)

如果您命名月份和星期几,并按正确的顺序排列它们,并在 y 轴上使用对数刻度,则情节会更清晰。您可以使用 facet_grid 为每个工作日创建子图。

library(hflights)
library(tidyverse)

weekday <- c('Sunday', 'Monday', 'Tuesday', 'Wednesday', 
             'Thursday', 'Friday', 'Saturday')

hflights %>% 
  mutate(WeekDay = factor(weekday[DayOfWeek], weekday),
         Month = factor(month.abb[Month], month.abb)) %>%
  filter(Cancelled == 0) %>%
  ggplot(aes(Month, DepDelay)) +
  geom_boxplot() +
  scale_y_log10() +
  facet_wrap(.~WeekDay) +
  labs(x = 'Month', y = 'Departure delay (log scale)')

要让一条线穿过每个面板,您需要为每个月和日的唯一组合取一个平均值。最简单的方法是通过 geom_smooth

hflights %>% 
  mutate(WeekDay = factor(weekday[DayOfWeek], weekday),
         Month = factor(month.abb[Month], month.abb)) %>%
  filter(Cancelled == 0) %>%
  ggplot(aes(Month, DepDelay, group = WeekDay)) +
  geom_smooth(se = FALSE, color = 'black') +
  facet_wrap(.~WeekDay) +
  labs(x = 'Month', y = 'Departure delay (log scale)')

虽然你也可以自己总结数据,用geom_line

hflights %>% 
  filter(Cancelled == 0) %>%
  mutate(WeekDay = factor(weekday[DayOfWeek], weekday),
         Month = factor(month.abb[Month], month.abb)) %>%
  group_by(Month, WeekDay) %>%
  summarize(Delay = mean(DepDelay)) %>%
  ggplot(aes(Month, Delay, group = WeekDay)) +
  geom_line(color = 'black') +
  facet_wrap(.~WeekDay) +
  labs(x = 'Month', y = 'Departure delay (log scale)')