2017-05-09 5 views
2

Ich versuche Variablen in Variablen zu gruppieren und in absteigender Reihenfolge zu sortieren.Mehrere Variablen in ggplot2 bestellen

mydf

region airport value 
MIA   FLL 0.244587909 
MIA   PBI 0.824144687 
MIA   MIA 0.484907626 
NYC   EWR 0.731075565 
NYC   LGA 0.708648915 
NYC   HPN 0.523991258 
LAX   LGB 0.651847818 
LAX   LAX 0.423607479 
LAX   SNA 0.433837044 
LAX   ONT 0.723144957 
Other MCO 0.657586674 
Other SJC 0.084138321 
Other OAK 0.698794154 
Other BOS 0.85765002 
Other BNA 0.018953126 
Other WAS 0.234897245 

https://i.stack.imgur.com/G1E2k.jpg

enter image description here

Ich versuche, das obige Diagramm zu reproduzieren. Hier

ist der erste Versuch:

ggplot(mydf, aes(x=airport,y=value, fill = region)) + 
    geom_bar(stat = "identity") 

Hier ist der zweite Versuch:

ggplot(mydf, aes(x=reorder(airport,-value,sum),y=value, fill = region)) + 
    geom_bar(stat = "identity") 

ich hier bin stecken. Kann ich Nachbestellungen verschachteln? reorder(reorder(x, y), y) Ich möchte dies nicht zu einem manuellen Prozess machen müssen, der jede Gruppierung aufruft.

This is as far as I can get

mydf$order <- c('ONT','LGB','SNA','LAX','PBI','MIA','FLL','EWR','LGA','HPN','BOS','OAK','MCO','WAS','SJC','BNA') 

ggplot(mydf, aes(x=airport,y=value, fill = region, order = order)) + 
    geom_bar(stat = "identity") 

tut dies immer noch nicht funktioniert. Ich würde mich über jede Hilfe freuen!

Antwort

2

@ eipi10 hat eine große Antwort, aber ich finde mich oft, dass zu tun, um Plus Facettieren auf eine andere Variable, so gibt es andere Möglichkeiten als auch mit dem forcats Paket:

require(dplyr) 
require(forcats) 

mydf %>% 
    mutate(ordering = -as.numeric(region) + value, 
     airport = fct_reorder(airport, ordering, .desc = T)) %>% 
    ggplot(aes(airport, value, fill = region)) + geom_col() 

enter image description here

Hier ist ein Beispiel dafür, wie ich brauchen könnte, die Bestellung und die Facetten zu verwenden, wHE

enter image description here

4

durch bestellen valueregion innerhalb jeder abnimmt, wir sortieren nach region und dann durch value innerhalb der Region und dann airport mit der sortierten Reihenfolge der Ebenen zu einem Faktor konvertieren. Dann verwenden wir Facettierung, um separate Panels für jede Region zu erhalten.

library(tidyverse) 

ggplot(mydf %>% arrange(region, desc(value)) %>% 
     mutate(airport=factor(airport, levels=airport)), 
     aes(x=airport,y=value, fill = region)) + 
    geom_bar(stat="identity", show.legend=FALSE) + 
    geom_text(aes(label=round(value,2), y=0.5*value), colour="white", size=3) + 
    facet_grid(. ~ region, scales="free_x", space="free_x") + 
    scale_y_continuous(limits=c(-0.005, 1.05*max(mydf$value)), expand=c(0,0)) + 
    theme_classic() + 
    theme(panel.spacing=unit(0,"pt"), 
     panel.border=element_rect(colour="grey50", fill=NA)) 

enter image description here

+0

Wow: re ich + facet_grid(~fac, scales = "free_x", space = "free_x") mit einer anderen Spalte mit dem Namen "fac" mit meiner Reise Geschichte hinzufügen! danke für die Hilfe! (Bonuspunkte für die süße Formatierung) –