2011-08-01 14 views
9

con este conjunto de datos en formato CSV y gracias a la entrada/ayuda de stackoverflow logré trazar un barplot con barras horizontales y barras de color mediante "grupos" utilizando ggplot! Esta es la primera vez que uso ggplot.R ggplot ordenar bares en la parcela "barplot-como"

GO Biological Process,regulation of lipid metabolic process,1.87E-35 
GO Biological Process,acute inflammatory response,3.21E-37 
GO Biological Process,response to insulin stimulus,1.05E-38 
GO Biological Process,steroid metabolic process,4.19E-39 
GO Biological Process,cholesterol metabolic process,1.19E-40 
GO Biological Process,cellular response to chemical stimulus,5.87E-42 
GO Biological Process,alcohol metabolic process,5.27E-43 
GO Biological Process,sterol metabolic process,2.61E-43 
GO Biological Process,lipid homeostasis,1.12E-44 
GO Biological Process,response to peptide hormone stimulus,1.29E-45 
GO Biological Process,monocarboxylic acid metabolic process,2.33E-54 
GO Biological Process,cellular ketone metabolic process,5.46E-74 
GO Biological Process,carboxylic acid metabolic process,2.41E-76 
GO Biological Process,organic acid metabolic process,5.30E-79 
Pathway Commons,FOXA transcription factor networks,7.40E-61 
Pathway Commons,FOXA2 and FOXA3 transcription factor networks,1.39E-64 
Transcription Factor Targets,"Targets of HNF6, identified by ChIP-chip in hepatocytes",1.77E-32 
Transcription Factor Targets,"Targets of HNF1alpha, identified by ChIP-chip in hepatocytes",3.87E-65 
Transcription Factor Targets,"Targets of HNF4alpha, identified by ChIP-chip in hepatocytes",1.38E-131 

Este es mi código:

ggplot(tmp, aes(x=tmp$V2, y=-log10(tmp$V3), fill=tmp$V1)) + 
geom_bar(stat="identity") + 
coord_flip() 

enter image description here

Ahora me gustaría crear la misma parcela que el anterior pero en la que se clasifican los valores dentro de cada uno de los "grupos". Algo que se verá así.

enter image description here

Soy nuevo en ggplot, por lo que cualquier ayuda será apreciada. Gracias.

Ben

Respuesta

9

Usted puede ordenar la variable mediante su conversión en factor.

> head(d) 
        V1          V2  V3 
1 GO Biological Process regulation of lipid metabolic process 1.87e-35 
2 GO Biological Process   acute inflammatory response 3.21e-37 
3 GO Biological Process   response to insulin stimulus 1.05e-38 
4 GO Biological Process    steroid metabolic process 4.19e-39 
5 GO Biological Process   cholesterol metabolic process 1.19e-40 
6 GO Biological Process cellular response to chemical stimulus 5.87e-42 

> d$V4 <- factor(d$V2, levels=d$V2) # convert V2 into factor 
> head(d) 
        V1          V2  V3          V4 
1 GO Biological Process regulation of lipid metabolic process 1.87e-35 regulation of lipid metabolic process 
2 GO Biological Process   acute inflammatory response 3.21e-37   acute inflammatory response 
3 GO Biological Process   response to insulin stimulus 1.05e-38   response to insulin stimulus 
4 GO Biological Process    steroid metabolic process 4.19e-39    steroid metabolic process 
5 GO Biological Process   cholesterol metabolic process 1.19e-40   cholesterol metabolic process 
6 GO Biological Process cellular response to chemical stimulus 5.87e-42 cellular response to chemical stimulus 

> # plot 
> ggplot(d, aes(V4, -log10(V3), fill=V1)) + geom_bar() + coord_flip() 

aquí es más información: http://kohske.wordpress.com/2010/12/29/faq-how-to-order-the-factor-variables-in-ggplot2/

9
ggplot(df, aes(reorder(x,y),y)) + geom_bar() 

La parte que estás buscando es reordenar (x, y). Pero si pudiera mostrarnos su llamada ggplot() actual, podríamos ser más específicos ya que reordenar() no es el único método.

Para este tipo de clasificación, es posible que necesite usar Vuelva a nivelar(), pero depende de sus datos.

También puede agregar otra columna a la hoja.de.datos() que actuará como una variable de clasificación, manual o automáticamente, y basar su nuevo pedido() llamar fuera de eso.

+0

Creo que te falta un cierre ')' para la función ggplot. Lo editaría yo mismo, pero tiene menos de 6 caracteres. – Kevin

+0

@Kevin buena captura! Sintaxis Sneeky, siempre me equivoco la primera vez –

4

Suponiendo que los datos proporcionados por Ben está en un archivo CSV llama data.csv:

d <- read.csv('data.csv', header = F) 
d$V2 <- factor(d$V2, levels=d[order(d$V1, -d$V3), ]$V2) #reorder by grp/value 
ggplot(d, aes(x=V2, y=-log10(V3), fill=V1)) + geom_bar() + coord_flip() 

Este método es un poco más general en comparación con la respuesta de kohske, y no requiere que se clasifique el CSV (el cambio del orden de las filas en el archivo CSV reproducirá el gráfico correcto).

Cuestiones relacionadas