Saltar al contenido

Cambiar el orden de las barras esquivadas en ggplot2 barplot

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”)
ingrese la descripción de la imagen aquí

orden incorrecto en esquivar:

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

ingrese la descripción de la imagen aquí

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *