2017-06-05 129 views
-1

当我试图在我的代码的最后一行添加一个变量(航班数量)时,问题就出现了。 我可以添加多个geom,x轴和y轴的单位不一定相同吗?谢谢R如何绘制多个几何图形的图形

library(nycflights13) 
library(tidyverse) 
flights %>% 
mutate(
    cancelled_flights = is.na(dep_delay), 
    sched_dep_time.HMM = sched_dep_time %/%100 + (sched_dep_time%%100)/60, 
    sched_dep_time.byH = sched_dep_time.HMM %/%1) %>% 
group_by(sched_dep_time.byH) %>% 
summarise(
    delay_prob = sum(is.na(dep_delay))/n(), 
    count = n()) %>% 
filter(sched_dep_time.byH >=2) %>% 
ggplot() + 
geom_path(mapping = aes(x = sched_dep_time.byH, y = delay_prob)) + 
geom_col(mapping = aes(x = sched_dep_time.byH, y = count)) 

回答

1

为什么你的阴谋没有显示的唯一原因是由于不同的y轴值delay_prob(0.005〜0.04)和count(1061至27242)。

这里是玩弄第二y轴显示两条曲线的方式:

ggplot(df, aes(x = sched_dep_time.byH)) + 
    geom_line(aes(y = delay_prob), colour="red") + 
    geom_bar(aes(y=count/1000000), stat="identity") + 
    scale_y_continuous(sec.axis = sec_axis(~.*1000000, name = "count")) 

enter image description here

替代做法与facet_wrap上绘制不同的情节:

df <- df %>% gather(type, val, delay_prob, count) 

ggplot(df, aes(sched_dep_time.byH, val)) + 
    geom_bar(data=df %>% filter(type=="count"), stat="identity") + 
    geom_line(data=df %>% filter(type=="delay_prob")) + 
    facet_wrap(~type, scales="free", ncol=1) 

enter image description here

输入数据:

df <- flights %>% 
    mutate(
    cancelled_flights = is.na(dep_delay), 
    sched_dep_time.HMM = sched_dep_time %/%100 + sched_dep_time%%100)/60, 
    sched_dep_time.byH = sched_dep_time.HMM %/%1) %>% 
    group_by(sched_dep_time.byH) %>% 
    summarise(
    delay_prob = sum(is.na(dep_delay))/n(), 
    count = n()) %>% 
    filter(sched_dep_time.byH >=2) 
+0

非常感谢Adam。这不仅仅是有益的。 – Sean