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 ...
War es hilfreich?

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") eingeben Bild Beschreibung hier

falsche Reihenfolge in ausweichen:

g+geom_bar(stat="identity",position="dodge")

eingeben Bild Beschreibung hier

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")

Ä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!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top