使用 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)')
所以我需要使用 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)')