2010-06-07 163 views
6

我試圖繪製使用以下casbon的解決方案的csv數據GGPLOT2熱圖中ggplot2熱圖:如何保留標籤的順序?

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

問題是X-標籤嘗試重新排序本身。例如,如果我在該示例數據中交換標籤COG0002和COG0001,則x標籤仍按排序順序排列(cog0001,cog0002,cog0003 .... cog0008)。

反正有防止這種情況嗎?我想它在csv文件

感謝

+0

下面有很好的答案。這是一個小心,在研究這個問題時,你可能會遇到'有序因素'。除非你知道你在做什麼,否則不要使用它。按照特定的順序和使用有序因子來設置關卡並不是一回事。例如,有序因素會導致一些建模軟件默認爲多項式而不是治療效果。 – John 2010-06-07 15:48:35

回答

4

如果您想直接從csv文件保持這個順序:

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

在這種情況下不是問題,但是在重複條目的情況下應該有'unique(as.character(foo [[1]]))'。 – Marek 2010-06-07 15:27:55

2

你嘗試繪製之前重新排序因子水平可以訂購? 例如

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

(我不能嘗試,現在,所以我不能肯定它的工作原理)

+0

我不認爲我可以手動訂購,因爲我的數據大約有100多點。 – 2010-06-07 14:34:37

5

如果我記得,當使用默認級別參數調用factor(x)時,級別設置爲levels = sort(unique(x))。

您可以通過設置levels = unique(x)來覆蓋此操作。

例如:

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

[1] 「G」, 「J」 「○」 「×」, 「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」, 「一個」, 「W」 的 「i」

[20] 「p」, 「v」, 「C」 的 「n」, 「t」 的 「L」, 「H」

可以看到,設置電平= unique(x)保留數據中出現的順序。