【问题标题】:heat maps in R with heatmap.2R中的热图与heatmap.2
【发布时间】:2012-10-04 17:19:15
【问题描述】:

我正在尝试在 R 中创建热图。我已尝试使用 heatmap.2 命令。

我的数据由 x 和 y 列以及一个点的相关相对频率(频率除以总频率)组成

在大多数地方频率为零,而在其他地方则相对频率较小。我已将数据转换为矩阵,因为这似乎是 heatmap 命令想要的,并试图删除 x 和 y 坐标。

BB <- matrix(as.matrix(surfacerevfreq1[, 3]),  ncol = 35, byrow = T)

在我看来有两个问题,并不是所有的 x 和 y 坐标都列出来了。即 x 坐标从 1 开始到 35,而 y 坐标从 11 开始到 30。热图函数似乎不喜欢这样。我考虑过在数据集的开头插入零,以便 y 轴上 1-10 的每个点都有一个值。但是,我不确定这是否是最好的主意。

所以我想我的问题是:我如何格式化我的数据,以便我可以从这些数据中获得有效的热图?我应该补充一点,如果可能的话,我希望我的 x 和 y 刻度上的数字也显示出来。由于它以图形方式显示与每个点相关的相对频率的目的。

谢谢。

这是我的数据的一个子集,以便您可以看到它在矩阵形式中的样子

    col1         col2         col3         col4         col5         col6            col7         col8         col9        col10        col11        col12 
0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000    0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 
   col13        col14        col15        col16        col17         col18            col19        col20        col21        col22        col23        col24 
0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000  0.0000000000 0.0000000000 0.0000000000 0.0005017561 0.0005017561 0.0000000000 
   col25        col26        col27        col28        col29            col30            col31        col32        col33        col34        col35 
0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000      0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 

这是我正在使用的热图命令:

hU <- heatmap.2(xx, Rowv=FALSE, symm=TRUE,  trace="none", density.info="none",   dendrogram="none")

【问题讨论】:

  • 不要只是发布数据的样子,而是使用dput(xx),这样我们就可以将其剪切并粘贴到我们的浏览器中。
  • 另外,您能否清理一下您的标题,以便提供更多信息?它有点让读者悬而未决......

标签: r ggplot2 heatmap


【解决方案1】:

试试这个,考虑到你的 3 列数据存储在 data[x, y, q]

a = matrix(0, nrow = 30 - 10, ncol = 35)
rownames(a) = 11:30
apply(data, 1, function(x) a[x[2] - 10, x[1]] <<- x[3])
heatmap.2(a, Rowv=FALSE, symm=TRUE,  trace="none", density.info="none", 
          dendrogram="none", xlab="X", ylab="Y")

【讨论】:

  • 嗨@Ali,当我这样做时,我收到以下错误:apply(surfacerevfreq1, 1, function(x) a[x[2] - 10, x[1]]
  • 你确定你的数据和我告诉你的一样吗(data[x,y,q])?如果是这样,请检查data[,2],其中不应该有小于11的数字。如果您找不到问题,请您修改问题并提供一些原始数据行吗?
  • 是的,我发现我使用的是旧版本的文件。感谢您的帮助
【解决方案2】:

尝试使用 ggplot2,它会产生更好的热图

例子:

data <- read.csv("data.txt", header=T, sep=",")
attach(data)
data.m = melt(data) 
data.m <- ddply(data.m, .(variable), transform, rescale = rescale(value))
require(ggplot2)
p <- ggplot(data.m, aes(variableX, variableY)) + geom_tile(aes(fill = rescale), 
  colour =   "white") + scale_fill_gradient(low = "red", high = "green")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    相关资源
    最近更新 更多