2016-04-08 9 views
4

Hier ist a link to my data.ggplot Löcher im gestapelten Bereich Diagramm

Ich verwende den folgenden Code ein:

#read in data 
data = read.csv("ggplot_data.csv") 

#order by group then year 
data = arrange(data, group, year) 

#generage ggplot stacked area chart 
plot = ggplot(data, aes(x=year,y=value, fill=group)) + 
    geom_area() 
plot 

, dass die folgende Tabelle erzeugt: enter image description here

Wie Sie sehen können, gibt es ungeradee Löcher in drei verschiedenen Teilen dieses Diagramms.

I previously had this issue and asked about it, und die Antwort dann war, dass ich meine Daten nach Gruppe und Jahr sortieren musste. Zu der Zeit, diese Antwort repariert meine Löcher. Allerdings scheint es diesmal nicht alle Löcher zu beseitigen. Irgendeine Hilfe?

Antwort

6

Der Grund für die Lücken ist, dass einige Zeitreihen später als andere beginnen. Wenn der erste nicht verschwindende Wert erscheint, beginnt der neue Bereich mit einem nicht kontinuierlichen Sprung. Der darüber liegende Bereich wird jedoch durch lineare Interpolation mit dem nächsten Punkt verbunden. Dies führt zu der Lücke.

Betrachten Sie zum Beispiel die Lücke ganz links. Der Olivenanbau beginnt unmittelbar nach der Lücke mit einem Vertikalsprung im Jahr 1982. Die Grünfläche steigt jedoch linear von dem Wert von 1981 (wo die Olivenfläche Null ist) bis zum Wert von 1982 (wo die Olivenfläche plötzlich beiträgt).

Was könnten Sie tun, ist, zum Beispiel einen Wert von Null am Anfang jeder Zeitreihe hinzufügen, die nach 1975 beginnt ich dplyr Funktionalität eines Datenrahmens dieser zusätzlichen ersten Jahren zu schaffen:

first_years <- group_by(data, group, group_id) %>% 
       summarise(year = min(year) - 1) %>% 
       filter(year > 1974) %>% 
       mutate(value = 0, value_pct = 0) 
first_years 
## Source: local data frame [3 x 5] 
## Groups: group [3] 
## 
## group group_id year value value_pct 
## (fctr) (int) (dbl) (dbl)  (dbl) 
## 1  c 10006 1981  0   0 
## 2  e 10022 2010  0   0 
## 3  i 24060 2002  0   0 

Wie Sie sehen können, passen diese drei neuen Werte genau zu den drei Lücken in Ihrem Plot. Jetzt können Sie diesen neuen Datenrahmen mit Ihrem data und sortieren in der gleichen Art und Weise verbinden wie zuvor:

data_complete <- bind_rows(data, first_years) %>% 
       arrange(year, group) 

und die Handlung hat dann keine Lücken:

ggplot(data_complete, aes(x=year,y=value, fill=group)) + 
    geom_area() 

enter image description here

+0

Wow, das war unglaublich klar, prägnant und hilfreich. Ich danke dir sehr!! – Jim

-1

gefunden Es ist einfacher, meine Tabelle in csv zu speichern und die python-Funktion matplotlib stackplot (demo) zu verwenden, die anscheinend keine Probleme mit negativen Zahlen hat.

0

@ Stibus Antwort ist wahrscheinlich am besten, aber für diejenigen von uns, die nicht sehr R-savvy sind und nicht wissen, wie man einen Datensatz mit R durchgeht, um fehlende Zeilen zu finden und sie mit Nullen zu füllen, löste ich dieses Problem mit einem etwas anderen Ansatz.

Für meinen Fall habe ich einen Dummy-Datensatz mit Nullen für alle Jahre und alle Gruppen erstellt und dann an meinen ursprünglichen Datensatz angehängt. So habe ich seit Jahren Zeilen hinzugefügt, wo vorher einfach keine Datenzeilen waren. Nach der Aggregation nach Jahr und Gruppe enthielt mein aggregierter Datensatz Zeilen mit Null, im Gegensatz zu überhaupt keine Zeilen. Das hat all diese seltsamen Lücken für mich beseitigt.