2010-06-07 160 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)保留数据中出现的顺序。