2010-06-07 10 views
6

sto cercando di tracciare mappa termica in ggplot2 utilizzando i dati CSV seguente soluzione di casbon inggplot2 heatmap: come conservare l'ordine delle etichette?

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

il problema è x-label cercare di riordinare se stesso. Ad esempio, se si scambiano le etichette COG0002 e COG0001 in tali dati di esempio, l'etichetta x viene ancora pubblicata in ordine (cog0001, cog0002, cog0003 .... cog0008).

Esiste comunque la prevenzione? Voglio che da ordinare come in file CSV

grazie

pp

+0

Ci sono buone risposte qui sotto. Ecco un'avvertenza, guardando in questo potresti incontrare il "fattore ordinato". Non usarlo a meno che tu non sappia cosa stai facendo. Mettere i livelli in un ordine particolare e usare un fattore ordinato non sono la stessa cosa. Ad esempio, i fattori ordinati causeranno l'impostazione predefinita di alcuni software di modellazione su effetti polinomiali piuttosto che sul trattamento. – John

risposta

4

Se si desidera mantenere l'ordine direttamente dal file CSV:

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

In questo caso non è un problema, ma ci dovrebbe essere 'unique (as.character (foo [[1]]))' in caso di voci duplicate. – Marek

2

Hai provato riordino livelli di fattore prima di tracciare? ad es.

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

(non posso Provalo ora, quindi non posso essere sicuro che funziona)

+0

Non penso di poter ordinare manualmente poiché i miei dati hanno circa 100 e più punti. –

5

Se ricordo, quando si chiama factor (x) con l'argomento dei livelli predefiniti, i livelli sono impostati come levels = sort (unique (x)).

È possibile sovrascrivere questa azione impostando i livelli = univoco (x).

Ad esempio:

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"

si può vedere che l'impostazione dei livelli = unique (x) conserva l'ordine di occorrenza nei dati.