Solución:
creo df.all$number
debe ser un factor ordenado. Tratar df.all$number <- ordered(df.all$number)
En algunos casos, no creo que esto sea posible:
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"))
orden correcto en apilado:
g + geom_bar (estadística = “identidad”, posición = “pila”)
orden incorrecto en esquivar:
g+geom_bar(stat="identity",position="dodge")
intentemos invertir el orden en ggplot:
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")
no dados
intentemos reordenar el marco de datos
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")
no
Hadley ha proporcionado una solución. Aquí hay una réplica del problema y la solución.
El objetivo es que las barras etiquetadas con “S” estén antes de las barras etiquetadas con “P”. Esto no sucede de forma predeterminada porque R ordena los niveles alfabéticamente.
df <- read.csv("http://pealco.net/code/ggplot_dodge/df.txt")
ggplot(df, aes(gram, V1, fill=number))
+ geom_bar(stat="identity", position="dodge")
Como comentó Hadley en otra respuesta, “debe reordenar según las variables x, no la variable y”. Aunque no estoy seguro de por qué funciona esto.
Para cambiar el orden de los factores en este ejemplo, puede convertir el factor en numérico y multiplicar por -1.
df <- with(df, df[order(gram, -as.numeric(number)), ])
Todavía me gustaría una explicación más sobre por qué df <- with(df, df[order(gram, -as.numeric(number)), ])
obras.