2017-06-05 8 views
-1

Das Problem kommt, als ich versuchte, eine weitere Variable, die Anzahl der Flüge, in der letzten Zeile meines Codes hinzuzufügen. Kann ich mehr als ein Geom hinzufügen, welche Einheit von X-Achse und Y-Achse sind nicht unbedingt identisch? DankeR Wie zeichne ich ein Diagramm mit mehreren Geom

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

Antwort

1

Der einzige Grund, warum Ihr Grundstück ist aufgrund der unterschiedlichen y-Achse Wert für delay_prob (0,005 bis 0,04) nicht zeigt und zählt (1061-27242).

Hier ist ein Weg, um mit einer zweiten y-Achse zu spielen, um beiden Grundstücke zu zeigen:

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

Alternative Ansatz von verschiedenen Parzellen auf mit facet_wrap Plotten:

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

Eingabe Daten:

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

Vielen Dank Adam. Es ist mehr als hilfreich. – Sean

Verwandte Themen