Ändern der Reihenfolge der ausgewichen Bars in ggplot2 BarPlot
Frage
Ich habe einen Datenrahmen df.all
und ich bin Plotten es in einem Balkendiagramm mit ggplot2 unter dem Code. Ich mag es so machen, dass die Reihenfolge der ausgewichen Bars gekippt wird. Das heißt, so dass die Stäbe der Aufschrift "Singular" vor den Bars der Aufschrift "Plural".
ggplot(df.all, aes(gram, V1, fill=number)) +
geom_bar(stat="identity", position="dodge") +
scale_x_discrete(labels=c("Grammatical","Ungrammatical")) +
scale_y_continuous(formatter="percent", limits=c(0,1)) +
facet_grid(. ~ experiment) +
scale_fill_hue("Attractor", breaks=c("S","P"), labels=c("Singular","Plural"))
Ich habe levels(df.all$number) = c("S", "P")
Denken versucht zu tun, dass vielleicht ggplot verwendet die Reihenfolge der Ebenen, um zu entscheiden, um Plotten, aber das hat nicht funktioniert. Ich bin nicht sicher, was anderes zu versuchen. Irgendwelche Ideen?
Der Inhalt df.all
, falls es sinnvoll ist:
> df.all
number gram experiment V1
1 S G BERIMBAU_AGR_A 0.8133333
2 S G BERIMBAU_AGR_B 0.8658537
3 S U BERIMBAU_AGR_A 0.5436242
4 S U BERIMBAU_AGR_B 0.4597701
5 P G BERIMBAU_AGR_A 0.8580645
6 P G BERIMBAU_AGR_B 0.8536585
7 P U BERIMBAU_AGR_A 0.3087248
8 P U BERIMBAU_AGR_B 0.3975904
> str(df.all)
'data.frame': 8 obs. of 4 variables:
$ number : Factor w/ 2 levels "S","P": 2 2 2 2 1 1 1 1
..- attr(*, "scores")= num [1:2(1d)] 0 -1
.. ..- attr(*, "dimnames")=List of 1
.. .. ..$ : chr "P" "S"
$ gram : Factor w/ 2 levels "G","U": 1 1 2 2 1 1 2 2
$ experiment: Factor w/ 4 levels "BERIMBAU_AGR_A",..: 1 4 1 4 1 4 1 4
$ V1 : num 0.813 0.866 0.544 0.46 0.858 ...
Lösung 3
Hadley hat eine Lösung zur Verfügung gestellt. Hier ist eine Replikation des Problems und der Lösung.
Das Ziel ist, die Stäbe mit „S“ zu erhalten zu kommen, bevor die Stangen „P“ gekennzeichnet. Dies geschieht nicht standardmäßig, weil R Aufträge Ebene in alphabetischer Reihenfolge.
df <- read.csv("http://pealco.net/code/ggplot_dodge/df.txt")
ggplot(df, aes(gram, V1, fill=number))
+ geom_bar(stat="identity", position="dodge")
Wie kommentiert Hadley in einer anderen Antwort, „Sie auf den x-Variablen basieren neu ordnen müssen, nicht der y-Variable“. Obwohl ich bin mir nicht sicher, warum das funktioniert.
Um die Reihenfolge der Faktoren, die in diesem Beispiel Flip, können Sie den Faktor in numerischen umwandeln können und multiplizieren mit -1.
df <- with(df, df[order(gram, -as.numeric(number)), ])
Ich würde immer noch wie eine weitere Erklärung, warum df <- with(df, df[order(gram, -as.numeric(number)), ])
funktioniert.
Andere Tipps
ich glaube, df.all$number
Bedürfnisse ein geordneter Faktor. Versuchen Sie df.all$number <- ordered(df.all$number)
In einigen Fällen, die ich glaube nicht, das ist möglich:
layerCake<-data.frame(group=c(rep("normal",4),rep("tumor",4)),
class=factor(rep(c("exon","intron","intergenic","unmapped"),2),levels=rev(c("exon","intron","intergenic","unmapped")),ordered=TRUE),
fraction=c(.02,.25,.50,.23,.015,.20,.555,.23)
)
layerCake[layerCake$group=='normal',"reads"]<-130948403*layerCake[layerCake$group=='normal',"fraction"]
layerCake[layerCake$group=='tumor',"reads"]<-200948403*layerCake[layerCake$group=='tumor',"fraction"]
g<-ggplot(layerCake, aes(x=factor(group),y=reads, fill=factor(class),order = as.numeric(class)))+xlab("Group")+scale_fill_discrete(name="Anno Class",breaks=c("exon","intron","intergenic","unmapped"))
richtige Reihenfolge gestapelt:
g + geom_bar (stat = "Identität", Position = "stack")
falsche Reihenfolge in ausweichen:
g+geom_bar(stat="identity",position="dodge")
Lassen Sie uns versuchen, die Reihenfolge, in ggplot zu umkehren:
g<-ggplot(lc, aes(x=factor(group),y=reads, fill=factor(class),order = -as.numeric(class)))+xlab("Group")+scale_fill_discrete(name="Anno Class",breaks=c("exon","intron","intergenic","unmapped"))
g+geom_bar(stat="identity",position="dodge")
keine Würfel
Lassen Sie uns versuchen, den Datenrahmen neu zu ordnen
lc <- with(lc, lc[order(-as.numeric(class)), ])
g<-ggplot(lc, aes(x=factor(group),y=reads, fill=factor(class),order = -as.numeric(class)))+xlab("Group")+scale_fill_discrete(name="Anno Class",breaks=c("exon","intron","intergenic","unmapped"))
g+geom_bar(stat="identity",position="dodge")
Nö
Ändern Faktorstufen hat wirklich die Reihenfolge der ausgewichen Bars ändern! Fallstrick: Die Farben bleiben nach wie vor an einer bestimmten Position, so einen schnellen Blick nehmen macht es aussehen wie die Reihenfolge nicht geändert hat. Aber wenn man die Werte sehen Sie werden sehen, dass der Auftrag wirklich geändert hat.
Edit: Meine bisherige Antwort unten ändert sich nur der Reihenfolge der Farbschema bar angegeben. Dies ist immer noch sinnvoll, da wir oft das Farbschema zur gleichen Zeit umzukehren, wie eine Änderung der Reihenfolge der Stäbe mögen:
Ich war mit scale_fill_manual, weil ich die Farben meiner Bars manuell füllen wollte.
ggplot(data, aes_string(x = "countries", y = "population", fill = "agegroups")) +
scale_fill_manual(values = CustomColorFunction(), limits = (levels(data$agegroups)))
Wir verbrachten 5 Stunden Bastelei mit Faktorstufen zu ändern und die Datenrahmen Arrangieren hofft, dass dies hilft jemand!