2010-06-07 25 views
6

Je suis en train de tracer heatmap en ggplot2 en utilisant les données csv suivant la solution de casbon dansggplot2 heatmap: comment préserver l'ordre des étiquettes?

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

le problème est x-étiquette essayer de re-trier lui-même. Par exemple, si j'échange les libellés COG0002 et COG0001 dans cet exemple de données, l'étiquette x sort toujours dans l'ordre de tri (cog0001, cog0002, cog0003 .... cog0008).

Est-il possible d'empêcher cela? Je veux qu'il soit commandé comme fichier csv

grâce

pp

+0

Il existe de bonnes réponses ci-dessous. Voici une mise en garde, en regardant dans cela, vous pouvez rencontrer le «facteur ordonné». Ne l'utilisez pas à moins de savoir ce que vous faites. Mettre les niveaux dans un ordre particulier et utiliser un facteur ordonné ne sont pas la même chose. Par exemple, des facteurs ordonnés font que certains logiciels de modélisation passent par défaut à des effets polynomiaux plutôt que de traitement. – John

Répondre

4

Si vous voulez garder l'ordre directement à partir du fichier csv:

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

Dans ce cas, ce n'est pas un problème, mais il devrait y avoir 'unique (as.character (foo [[1]]))' en cas d'entrées en double. – Marek

2

Avez-vous essayé réordonnancement des niveaux de facteur avant de tracer? par exemple.

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

(je ne peux pas l'essayer en ce moment, donc je ne peux pas être sûr que cela fonctionne)

+0

Je ne pense pas que je pourrais commander manuellement puisque mes données ont environ 100 points et plus. –

5

Si je rappelle, en appelant le facteur (x) avec l'argument de niveaux par défaut, les niveaux sont définis comme levels = sort (unique (x)).

Vous pouvez remplacer cette action en définissant levels = unique (x).

Par exemple:

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"

on peut voir que le réglage des niveaux = unique (x) préserve l'ordre d'apparition dans les données.