2017-10-02 10 views
0

Angenommen, wir haben eine Reihe von Rohstoffen (Äpfel, Bananen, Kartoffeln usw.), die auf verschiedene Kontinente verteilt sind. Wir visualisieren ihre Verteilung auf Kontinenten über facettierte Barcharts in ggplot2 Paket, und diese Waren (im folgenden "Stuff" Feld genannt) fungieren als Faktoren auf der x-Achse angezeigt werden. Jeder Kontinent hat seine eigenen Sachen, wie in den Daten gezeigt, obwohl bestimmte Waren (Bananen) auf zwei oder mehr Kontinenten üblich sein können. Hier ist das Datenbeispiel im Kurzformat. Die Felder "Medium" und "Riese" unterteilen zusätzlich den Markt, der die Dinge in mittlere und große Größen unterteilt (um mit verschiedenen Farben gezeichnet zu werden).R: Zeichne einen einzigartigen Satz von Faktoren für jede Facette in ggplot2 balkart

data<-read.csv(text="continent,stuff,average,giant 
North America,apples,20,30 
North America,bananas,25,32 
Europe,bananas,15,25 
Europe,potatoes,10,20 
Europe,mosquitoes,13,17 
Asia,snakes,26,35 
Asia,snails,7,15 
Asia,pandas,10,20") 

Zuerst reduzieren wir die Daten zu Langformat, und nächste Grundstück es über geom_col() und Facettierung Technik:

library(dplyr) 
library(tidyr) 
library(ggplot2) 
data.tidied<-data %>% 
    gather(key=size, value=val,-continent,-stuff) 
ggplot(data.tidied,aes(x=stuff,y=val,fill=size))+ 
geom_col(position="dodge")+ 
facet_grid(~continent)+coord_flip() 

barchart with shared factors across facets

Alle Faktoren in Sachen sind auf allen Kontinenten ausgerichtet, obwohl die meisten von ihnen werden nicht benötigt, daher gibt es viele Lücken. Aber wir brauchen keine Schnecken in Nordamerika und Europa, es ist natürlich, dieses Feld nur für die asiatische Facette zu haben und so weiter. (Um die Dinge klarer zu machen, denken Sie vielleicht an Äpfel/Bananen/Kartoffeln als geografische Orte, einzigartig für einen Kontinent: Wir haben kein Kalifornien in Europa). Also: Wie kann man diese Situation mit der Facetten-Technik von ggplot (oder einer anderen Alternative) anzeigen? Das heißt: Wie zeichnet man eine einzigartige Menge von Faktoren für jede Facette?

Antwort

2

Sie facet_wrap statt facet_grid verwenden können, und geben Sie scales = "free_y" (hat free_y sein, wie Sie die Achsen gespiegelt). Aber es macht meiner Meinung nach die Charts etwas seltsam.

data %>% 
    gather(size, val, -continent, -stuff) %>% 
    ggplot(aes(stuff, val)) + 
    geom_col(aes(fill = size), position = "dodge") + 
    facet_wrap(~continent, scales = "free_y") + 
    coord_flip() 

enter image description here

Verwandte Themen