2016-03-25 3 views
2

Ich habe dieses R-Skript für eine lange Zeit ausgeführt und es funktionierte immer perfekt, aber heute habe ich es auf einem neuen Arbeitscomputer geladen und bemerkte, dass meine Diagramme anders kamen . Ich habe ggplot2 auf meiner Maschine neu installiert und jetzt sind meine Plots die gleichen wie bei meinen Kollegen.R ggplot2 Fehler: Stapeln nicht gut definiert, wenn ymin! = 0

Das Skript nimmt einen Datensatz, der wie folgt aussieht:

Var1 Var2 value Var3 
1 A Total -20.3681969 Total 
2 B Total -7.8687517 Total 
3 C Total -5.5482684 Total 
4 D Total -5.380664 Total 
5 E Total -1.6060702 Total 
6 F Total -1.5844055 Total 
7 G Total -1.571284 Total 
8 H Total -0.2576642 Total 
9 I Total -0.2448856 Total 
10 J Total -0.2114562 Total 
11 K Total -26.2567781 Total 
12 L Total -18.3848686 Total 
13 A Ghost 0 Ghost 
14 B Ghost -20.3681969 Ghost 
15 C Ghost -28.2369485 Ghost 
16 D Ghost -33.7852169 Ghost 
17 E Ghost -39.1658809 Ghost 
18 F Ghost -40.7719511 Ghost 
19 G Ghost -42.3563566 Ghost 
20 H Ghost -43.9276406 Ghost 
21 I Ghost -44.1853049 Ghost 
22 J Ghost -44.4301904 Ghost 
23 K Ghost -18.3848686 Ghost 
24 L Ghost 0 Ghost 

und schafft ein gestapeltes Balkendiagramm:

ggplot(data=myData, aes(x=Var1, y=value, fill=Var3, order=-as.numeric(Var2))) + geom_bar(stat="identity")+ 
    theme_bw() + theme(panel.border = element_blank(), panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), axis.line = element_line(colour = "black")) + 
    labs(x="", y="") + 
    scale_y_continuous(labels=format_si()) + 
    ggtitle("myData") + 
    guides(fill=FALSE) + 
    theme(axis.text.x = element_text(angle = 45, hjust = 1)) 

enter image description here

Mein Problem ist, dass vor der Neuinstallation ggplot2, die grünen Balken kamen oben heraus (zwischen der x-Achse und den lila Balken). Ich gehe davon aus, dass die neue Behandlung mit der oben erwähnten Warnung zu tun hat (obwohl ich diese Nachricht schon früher erhalten habe). Gibt es eine Möglichkeit, ggplot2 mitzuteilen, wie mit negativen Werten umgegangen wird, da alle Ausgaben negativ sind? Gibt es eine Möglichkeit, die grünen Balken explizit auf die x-Achse zu setzen? Ich habe versucht, mit dem Order-Operator in den Aufruf von ggplot2 zu mischen, konnte es aber nicht zum Laufen bringen. Danke für Ihre Hilfe!

+1

Die Ordnungsästhetik ist weg, und wenn stat "Identität" ist, werden die Balken so geordnet, wie sie in den Daten erscheinen, also müssen Sie die tatsächlichen Zeilen neu anordnen, um die Balkensegmentreihenfolge zu ändern. – joran

Antwort

2

Wie Joran in seinem Kommentar sagt, wird die order Ästhetik in ggplot2> = 2.0.0 nicht mehr unterstützt. Auch die Reihenfolge der gestapelten Balken wird nicht mehr durch die Reihenfolge der Faktorstufen bestimmt. Stattdessen müssen Sie die Datenreihen so ordnen, wie Sie möchten, dass Ihre Balken geordnet sind.

In Ihrem Fall ist dies relativ einfach, weil man einfach alphabetisch bestellen:

myData <- dplyr::arrange(myData, Var3, Var1) 

jedoch in der Regel alphabetische Reihenfolge vielleicht nicht, was Sie wollen. Aber Sie könnten stattdessen geordnete Faktoren verwenden. Diese ermöglichen es Ihnen eine individuelle Bestellung haben:

myData$Var3 <- ordered(myData$Var3, levels = c("Ghost", "Total")) 
myData <- dplyr::arrange(myData, Var3, Var1) 
head(myData) 
## Var1 Var2  value Var3 
## 1 A Ghost 0.00000 Ghost 
## 2 B Ghost -20.36820 Ghost 
## 3 C Ghost -28.23695 Ghost 
## 4 D Ghost -33.78522 Ghost 
## 5 E Ghost -39.16588 Ghost 
## 6 F Ghost -40.77195 Ghost 

Wie Sie sehen können, die Zeilen mit "Ghost" in Var3 kommen jetzt zuerst.

Jetzt hat die Handlung die Balken den Weg bestellt Sie gefragt:

ggplot(data=myData, aes(x=Var1, y=value, fill=Var3)) + 
    geom_bar(stat = "identity") 

enter image description here

Die Warnmeldung nicht weggeht und die Ordnung der Bar scheint keine Verbindung mit ihm zu haben . Es geht weg, wenn Sie nur positive Werte in Ihren Daten haben: Versuchen Sie, wie oben beschrieben, aber mit y=-value. Es scheint also, dass die Warnung erscheint, wenn Sie Balken mit negativer Länge zeichnen. Aber ich kann nicht sagen, dass ich verstehe, warum das so ist.

+0

Die Warnung beim Stapeln von Balkendiagrammen mit negativen Werten war immer (zumindest soweit ich mich erinnern kann) vorhanden. Ich denke, es bezieht sich auf die Idee, dass, wenn Sie einige Balken mit negativen Werten haben und einige ohne, es schwierig ist zu sagen, was der Benutzer wollte: Sollen die Balken ohne negative Werte bei Null beginnen, oder bei dem minimalen negativen Wert? Persönlich hätte ich wahrscheinlich ein Verhalten gewählt und die Warnung entfernt, aber das bin nur ich. – joran

+0

@joran Danke für deine Einsichten! – Stibu

+0

das funktioniert, danke! – user3390169

0
myData$Var2 <- factor(myData$Var2, levels = rev(levels(myData$Var2))) 

Dies sollte helfen. Außerdem sollten Sie die as.numeric() in der Reihenfolge = in ggplot ändern.

+0

Das macht nur Sinn, wenn 'myData $ Var2' bereits ein Faktor ist (was es vielleicht auch ist, wissen wir einfach nicht). Es wird dem OP aus zwei Gründen nicht helfen: 1) er benutzt 'Var3', nicht' Var2' in der Handlung; 2) Wie von joran ausgeführt, wird die Reihenfolge der Balken durch die Reihenfolge der Zeilen in den Daten und nicht durch die Reihenfolge der Faktorstufen bestimmt. Daher wird die Reihenfolge der Balken nicht geändert. – Stibu

+0

Einverstanden, dass die Antwort eilig und ungenau ist, danke für den Hinweis! –