2010-06-07 26 views
6

estoy tratando de trazar mapa de calor en ggplot2 utilizando datos csv siguiente solución de casbon enggplot2 heatmap: cómo preservar el orden de las etiquetas?

http://biostar.stackexchange.com/questions/921/how-to-draw-a-csv-data-file-as-a-heatmap-using-numpy-and-matplotlib

el problema es x-etiqueta de tratar de volver a ordenar en sí. Por ejemplo, si cambio la etiqueta COG0002 y COG0001 en esos datos de ejemplo, la etiqueta x aún aparece en orden de clasificación (cog0001, cog0002, cog0003 .... cog0008).

¿Hay alguna forma de evitar esto? Quiero que se puede pedir como en el archivo csv

gracias

pp

+0

Hay buenas respuestas a continuación. Aquí hay una advertencia, al analizar esto, puede encontrarse con el 'factor ordenado'. No lo use a menos que sepa lo que está haciendo. Poner los niveles en un orden particular y usar un factor ordenado no es lo mismo. Por ejemplo, los factores ordenados causarán que algún software de modelado adopte de forma predeterminada polinomios en lugar de efectos de tratamiento. – John

Respuesta

4

Si desea mantener el orden directamente desde el archivo csv:

foomelt$COG <- factor(foomelt$COG, levels = as.character(foo[[1]])) 
+1

En este caso no es un problema, pero debe haber 'único (como.caracter (foo [[1]]))' en caso de entradas duplicadas. – Marek

2

¿Usted intentó reordenar los niveles de factor antes de trazar? p.

foomelt$COG = factor(foomelt$COG,levels(foomelt$COG)[c(2,1,3:8)]) 

(no puedo probarlo ahora mismo, así que no puedo estar seguro de que funcione)

+0

No creo que pueda ordenar manualmente ya que mis datos tienen alrededor de 100 puntos o más. –

5

Si recuerdo, al llamar al factor (x) con el argumento de niveles predeterminado, los niveles se establecen como levels = sort (unique (x)).

Puede anular esta acción configurando levels = unique (x).

Por ejemplo:

set.seed(1) 
x = sample(letters, 100, replace = TRUE) 
head(x, 5) 

[1] "g" "j" "o" "x" "f"

levels(factor(x)) 

[1] "a" "b" "c "" d "" e "" f "" g "" h "" i "" j "" k "" l "" m "" n "" o "" p "" q "" r "" s "

[20] "t" "u" "v" "w" "x" "y" "z"

levels(factor(x, levels = unique(x))) 

[1] "g" "j" "o" "x" "f" "y" "r" "q" "b" "e" "u" "m" "s" "z" "d" "k" "a" "w" "i"

[20] "p" "v" "c" "n" "t" "l" "h"

se puede ver que los niveles de ajuste = unique (x) conserva el orden de aparición en los datos.

Cuestiones relacionadas