iheatmapr包:可交互的热图绘制方法
转自:省心宝典
在R中有许多用于绘制热图的包,今天介绍一个比较有意思的用于绘制热图的包,iheatmapr 包,这个包是用来绘制复杂的、且具有交互作用的热图。

用iheatmapr包绘制得到的热图就是下方这样,不仅能够反应多种信息,还具有交互功能。
这个热图中包含8个信息:
- 样本的相关性矩阵热图;
- 按列的聚类关系;
- 按行的聚类关系;
- 样本聚类模式的颜色注释;
- 每个样本最低和最高浓度的颜色注释;
- 样本自身分组的颜色注释;
- 每个样本真实药物处理实际过程的热图;
- 平均药物浓度随着时间变化的散点图。
iheatmapr包的安装(恒诺新知系统内可以免安装)
使用实例
首先要构造用于分析的绘图数据,这里使用datasets包内的Indometh作为示例。
#载入绘图包
library(iheatmapr)
library(datasets)
library(reshape2)
#使用acast调用Indometh数据集中的内容
Indometh_matrix <- acast(Indometh, Subject ~ time, value.var = "conc")
Indometh_matrix <- Indometh_matrix[as.character(1:6),]
rownames(Indometh_matrix) <- paste("Patient",rownames(Indometh_matrix))
##计算相关性矩阵
Indometh_patient_cor <- cor(t(Indometh_matrix))
##取每个样本数据中的最大值和最小值
patient_max_conc <- apply(Indometh_matrix,1,max)
patient_min_conc <- apply(Indometh_matrix,1,min)
##给每个样本随机分配一个分组
patient_groups <- c("A","A","B","A","B","A")
绘制相关性矩阵热图
example_heatmap <- main_heatmap(Indometh_patient_cor, name = "Correlation")
example_heatmap

可以使用colors参数修改颜色,colors = “RColorBrewer palettle/颜色名字”。
main_heatmap(Indometh_patient_cor,
colors = "Pinks",
name = "Correlation")

添加第二幅热图
main_heatmap(Indometh_patient_cor, name = "Correlation") %>%
add_main_heatmap(Indometh_matrix, name = "Indometacin<br>Concentration"

如果name=相同名字的话,新添加的热图会与之前的热图共享相同的颜色。
如果你想改变添加热图的位置,就使用side=c(“left”, “right”, “top”,”bottom”)。
添加标签
main_heatmap(Indometh_matrix, name="Correlation") %>%
add_row_labels() %>%
add_col_labels() %>%
add_row_title("Patients", buffer=0.2) %>%
add_col_title("Patients", buffer=0.1)

buffer规定title文字与图之间的距离。
添加聚类关系
main_heatmap(Indometh_patient_cor) %>%
add_row_clustering() %>%
add_col_clustering()

如果是希望以颜色表示样本的聚类关系,则需要先进行一个聚类,之后在手动进行负值。
clust_assign <- kmeans(Indometh_matrix, 3)$cluster
main_heatmap(Indometh_patient_cor) %>%
add_row_clusters(clust_assign) %>%
add_col_clusters(clust_assign)

添加样本注释
main_heatmap(Indometh_patient_cor) %>%
add_row_annotation(data.frame("Max" = patient_max_conc,
"Min" = patient_min_conc,
"Groups" = c("A","A","B","B","A","A")),
colors = list("Max" = "Reds",
"Min" = "Blues",
"Groups" = c("purple","pink")))

除了add_row_annotation,还可以使用add_row_signal和add_row_groups添加注释。
main_heatmap(Indometh_patient_cor) %>%
add_row_signal(patient_max_conc, "Max<br>Concentration", title = "Max", colors = "Reds") %>%
add_row_signal(patient_min_conc, "Min<br>Concentration", title = "Min", colors = "Reds") %>%
add_row_groups(c("A","A","B","B","A","A"), "Groups")

写在后面
到这里,我们已经分布讲解了文章开始出现的复杂热图中的大部分实现代码,下面给出一个完整的代码。
main_heatmap(Indometh_patient_cor,name = "Correlation") %>%
add_col_clustering() %>%
add_row_clustering(k = 3) %>%
add_row_title("Patients") %>%
add_col_title("Patients") %>%
add_row_annotation(data.frame("Max" = patient_max_conc,
"Min" = patient_min_conc,
"Groups" = patient_groups)) %>%
add_main_heatmap(Indometh_matrix,
name = "Indometacin<br>Concentration") %>%
add_col_labels() %>%
add_col_title("Time") %>%
add_col_summary()
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!