我已经使用EnsembIDs和三个样本(RNA-seq - > kallisto - > sleuth)为前100个差异表达的转录本创建了热图。
library(gplots) # heatmap.2
library(dplyr) # unite
heatmap.2(log(tmp_df+1), trace="none", density.info="none", scale="row")
现在我有兴趣在热图中添加基因名称,例如EnsemblD_genename。为此,我进行了如下工作:
1)创建" ext_gene" tmp_df中的列
tmp_df["ext_gene"] <- NA
2)来自tmp_df的target_id与top_100new的target_id匹配(包含ext_gene)
tmp_df$ext_gene <- top_100new$ext_gene[match(tmp_df$target_id, top_100new$target_id)]
3)合并tmp_df中的target_id和ext_gene列(target_id__ext_gene列代替target_id和ext_gene列)
unite <- unite(tmp_df, target_id__ext_gene, target_id, ext_gene, sep='_')
4)我无法转换&#34;团结&#34;到数字矩阵因为一列&#34; target_id__ext_gene&#34;在某些行中具有NA,例如ENSEMBL00001_NA,所以我试图用NONE替换NA。
unite$target_id__ext_gene <- gsub ('NA', 'NONE', unite$target_id__ext_gene)
5)但是,我仍然无法转换&#34;联合&#34;因为列&#34; target_id__ext_gene&#34;有角色类。我试过用
unite$target_id__ext_gene <- as.numeric(as.character(unite$target_id__ext_gene))
但是,它会转换列的所有行&#34; target_id__ext_gene&#34;进入NA(NAs introduced by coercion
)
我知道数字对象可以传递给heatmap.2并且只有因为一个字符列而被卡住了。
这是我使用reproduce(unite)的数据的样子:
target_id__ext_gene T2 Npt3 n1 Npt1 Npt2 T3
1) ENS00000112_NONE 5239.1161 0.000000e+00 1.117028e+03 0.000000e+00 0.000000e+00 3905.476311
2) ENS00000150_tfb2m 771.3926 1.012137e+03 4.132779e-06 7.785302e+02 7.625490e+02 634.195429
...
99) ENS00000130_NONE 136.2607 1.658801e+00 1.498763e+02 2.733379e+00 0.000000e+00 64.313849
100) ENS00000124_NONE 606.0573 1.155628e+02 3.062783e+02 1.054907e+02 1.084090e+02 430.250175
n3 n2 T1
1) 1.327292e+03 1.401719e+03 4230.5667240
2) 1.561575e-06 1.113367e-06 526.1571307
...
99) 1.511978e+02 1.240264e+02 68.4360589
100) 3.817887e+02 4.725010e+02 636.0279422
答案 0 :(得分:2)
问题可能是heatmap.2
需要数字矩阵,并且期望将rownames用作标签。但是,您可以从数据中完成此操作,而无需设置rownames。
首先,一些实际可重现的数据:
df <-
data.frame(
target_id__ext_gene = LETTERS
, matrix(rnorm(26*6, 50, 5)
, nrow = 26)
)
然后,将数字部分作为矩阵传递给heatmap.2
(没有标记列),并明确地传递标签:
heatmap.2(
as.matrix(df[, -1])
, labRow = df$target_id__ext_gene
)
产地:
您可以使用其他设置进一步修改。