【问题标题】:ggplot2 heatmap : how to preserve the label order?ggplot2 热图:如何保留标签顺序?
【发布时间】:2011-02-28 17:06:05
【问题描述】:

我正在尝试使用 csv 数据在 ggplot2 中绘制热图,遵循 casbon 中的解决方案

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

问题是 x-label 尝试重新排序。例如,如果我在该示例数据中交换标签 COG0002 和 COG0001,x-label 仍然按排序顺序出现(cog0001、cog0002、cog0003.... cog0008)。

有没有办法防止这种情况发生?我希望它像 csv 文件一样被订购

谢谢

pp

【问题讨论】:

  • 下面有很好的答案。这是一个警告,在调查这一点时,您可能会遇到“有序因素”。除非您知道自己在做什么,否则不要使用它。将级别按特定顺序排列和使用有序因子不是一回事。例如,有序因子会导致某些建模软件默认为多项式而不是处理效果。

标签: r ggplot2 heatmap


【解决方案1】:

如果我记得,当使用默认级别参数调用 factor(x) 时,级别设置为级别 = sort(unique(x))。

您可以通过设置 levels = unique(x) 来覆盖此操作。

例如:

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”

您可以看到设置 levels = unique(x) 保留了数据中的出现顺序。

【讨论】:

    【解决方案2】:

    如果您想直接从 csv 文件中保留订单:

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

    【讨论】:

    • 在这种情况下不是问题,但应该有unique(as.character(foo[[1]]))以防重复条目。
    【解决方案3】:

    您是否尝试在绘图前重新排序因子水平? 例如

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

    (我现在不能尝试,所以我不能确定它是否有效)

    【讨论】:

    • 我认为我不能手动排序,因为我的数据大约有 100 点或更多点。
    猜你喜欢
    • 1970-01-01
    • 2019-11-25
    • 2016-02-12
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 2019-07-16
    • 2020-08-30
    相关资源
    最近更新 更多