heatmap2:轴错误(1,at = xv,labels = lv):没有位置是有限的

时间:2014-05-27 05:11:35

标签: r heatmap

我试图使用heatmap2绘制非对称和非平方矩阵。 但我收到一条消息错误:

Error in axis(1, at = xv, labels = lv) : no locations are finite
Calls: heatmap.2 -> axis
Execution halted

实际上,我的数据在矩阵中是等于0,1还是? (缺失值)。 例如,使用此矩阵:

dat_mat
                   C1  C2
P17612|KAPCA_HUMAN  ?   0
P22612|KAPCG_HUMAN  0   1
P22694|KAPCB_HUMAN  1   0
P31751|AKT2_HUMAN   0   0 

预期的结果应该是热图,红色为“0”,绿色为“1”,没有(空白)为“?”。这是我正在使用的R脚本:

heatmap.2(dat_mat, 
Rowv = FALSE, 
Colv = FALSE, 
dendrogram = "none",
scale = "none",
margins = c(12,24),
key = TRUE,
keysize = 1.0,
col = rainbow(512, start = 1, end = 0.4), 
density.info="density", 
denscol = "black",
xlab="Compounds", 
ylab="Targets", 
main="X Activity Profile",
tracecol = "black")

1 个答案:

答案 0 :(得分:1)

我假设您的数据采用以下格式:

dat_mat<-matrix(sample(c("?","0","1"), 10*2, replace=T), ncol=2)    
colnames(dat_mat)<-c("C1","C2")
rownames(dat_mat)<-letters[1:nrow(dat_mat)]

所以你有一个字符矩阵(从你的描述中很难说出来)。好吧,热图需要数值,而且它实际上并不像非标准的缺失值。所以,让我们删除&#34;?&#34;并用NA替换它们,然后转换为数字

dat_mat[dat_mat=="?"]<-NA
class(dat_mat)<-"numeric"

那就是它。您现在应该可以按照预期绘制

heatmap.2(dat_mat,
    Rowv=F, Colv=F, dendrogram="none", scale="none",
    margins = c(12,24),
    key = TRUE,
    keysize = 1.0,
    col = rainbow(512, start = 1, end = 0.4), 
    density.info="density", 
    denscol = "black",
    xlab="Compounds", 
    ylab="Targets", 
    main="X Activity Profile",
    tracecol = "black"
)

resulting heatmap