2011-08-15 17 views
9

Estoy creando esta "barra de barras" con ggplot, pero me gustaría poder volver a clasificar las barras dentro de cada categoría para que las barras más altas estén en la parte superior. En resumen, tener una barra de Alta a Baja ordenando cada categoría.Ordenar barras dentro de cada factor usando ggplot2

A continuación es mi código - ¿Alguna pista son bienvenidos - Gracias

library("ggplot2") 
d <- read.csv('http://db.tt/EOtR3uh', header = F) 

d$V4 <- factor(d$V2, levels=d$V2) 
base_size <- 11 
ggplot(d, aes(d$V4, -log10(d$V3), fill=d$V1)) + 
geom_bar(stat="identity") + 
coord_flip() + 
labs(y = "-log10(Pvalues)",x = "",fill="") + 
theme_grey(base_size = base_size) + 
scale_x_discrete(expand = c(0, 0)) 

enter image description here

Respuesta

4

sólo una especie de acuerdo con sus niveles de

d <- read.csv('http://db.tt/EOtR3uh', header = F, stringsAsFactors=FALSE) 
lvls <- d$V2[order(d$V1,-d$V3)] 
d$V4 <- factor(d$V2, levels=lvls) 

ggplot2

+0

Buena respuesta, pero por la forma en que la leo, el OP solicita pedidos dentro de las categorías y arriba en la parte superior, por lo tanto 'orden (d $ v1, -d $ v3)' – James

+0

De hecho, me gustaría que estar dentro de cada categoría! –

+0

@James Buena llamada, gracias. –

0

Soy answerin g mi pregunta aquí:

la línea para cambiar es

d$V4 <- ordered(d$V2, levels=d$V2[order(d$V1,-d$V3)]) 

código completo:

library("ggplot2") 
d <- read.csv('http://db.tt/EOtR3uh', header = F) 

d$V4 <- ordered(d$V2, levels=d$V2[order(d$V1,-d$V3)]) 
base_size <- 11 
ggplot(d, aes(d$V4, -log10(d$V3), fill=d$V1)) + 
geom_bar(stat="identity") + 
coord_flip() + 
labs(y = "-log10(Pvalues)",x = "",fill="") + 
theme_grey(base_size = base_size) + 
scale_x_discrete(expand = c(0, 0)) 

enter image description here

2

Otra forma de lograr el mismo objetivo

require(ggplot2) 
d = arrange(d, V1, -V3)        # arrange d by V1 and -V3 
d = transform(d, V2 = factor(V2, as.character(V2))) # order V2 as in d 

qplot(V2, -log10(V3), fill = V1, geom = 'bar', data = d) + 
    coord_flip() 
Cuestiones relacionadas