前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >灵活的热图谁不喜欢?

灵活的热图谁不喜欢?

作者头像
作图丫
发布2022-03-29 08:14:13
1.1K0
发布2022-03-29 08:14:13
举报
文章被收录于专栏:作图丫作图丫

导语

GUIDE ╲

热图是一种流行的可视化高维数据的图形方法,其中一个数字表被编码为彩色单元格的网格。矩阵的行和列按顺序排列以突出显示模式,并且通常伴随有树状图。热图在许多领域中用于可视化观察、相关性、缺失值模式等。

背景介绍

热图可以说是我们在日常可视化中最常用到的图形之一了,绘制热图的R包和工具也是数不胜数,我们也介绍过许多常见的工具,比如pheatmap、complexheatmap等等,今天小编给大家介绍一个可以交互式绘制热图的R包--heatmaply,交互式热图允许通过将鼠标悬停在单元格上来检查特定值,以及通过在相关区域周围拖动矩形来放大热图的区域,使用起来非常灵活方便。

R包安装

代码语言:javascript
复制
install.packages('heatmaply')
##或者从github安装
install.packages.2 <- function (pkg) if (!require(pkg)) install.packages(pkg);
install.packages.2('remotes')
remotes::install_github("ropensci/plotly") 
remotes::install_github('talgalili/heatmaply')

可视化介绍

01

基础绘图

首先让我们试试默认的绘图

代码语言:javascript
复制
library("heatmaply")
heatmaply(mtcars)

相关性热图

heatmaply 包括 heatmaply_cor 函数,可以进行相关性热图的绘制,我们可以看到默认的色彩都很漂亮,可以直接使用:

代码语言:javascript
复制
##k_col和k_row分别代表使用几种颜色来给行和列着色
heatmaply_cor(
  cor(mtcars),
  xlab = "Features",
  ylab = "Features",
  k_col = 2,
  k_row = 2
)

很多情况下,我们在相关性热图中还要体现p值,也可以做一个更高级的相关热图,将p值映射到点大小:

代码语言:javascript
复制
r <- cor(mtcars)
cor.test.p <- function(x){
    FUN <- function(x, y) cor.test(x, y)[["p.value"]]
    z <- outer(
      colnames(x), 
      colnames(x), 
      Vectorize(function(i,j) FUN(x[,i], x[,j]))
)
    dimnames(z) <- list(colnames(x), colnames(x))
    z
}
p <- cor.test.p(mtcars)

heatmaply_cor(
  r,
  node_type = "scatter",
  point_size_mat = -log10(p), 
  point_size_name = "-log10(p-value)",
  label_names = c("x", "y", "Correlation")
)

由于交互式的灵活性,我们可以通过鼠标滑动选中一部分图形,实现zoom in/zoom out的效果:

然后双击即可返回原图

02

一些进阶功能

调色板

cetcolor 和 RColorBrewer包为连续和离散的调色板提供了许多出色的选项。

代码语言:javascript
复制
#两个颜色设置的例子 
heatmaply(
  percentize(mtcars),
  colors = heat.colors(100)
)
#
heatmaply(
  mtcars,
  scale_fill_gradient_fun = ggplot2::scale_fill_gradient2(
    low = "blue", 
    high = "red", 
    midpoint = 200, 
    limits = c(0, 500)
  )
)

自定义树状图

heatmaply 使用 seriation 包来找到行和列的最佳顺序。默认选项是“OLO”(最优叶排序)。另一种选择是“GW”(Gruvaeus 和 Wainer),它旨在实现相同的目标,但使用可能更快的启发式算法。“mean”给出了我们默认从其他包中的热图函数获得的输出,例如 gplots::heatmap.2。选项“none”为我们提供了树状图,没有任何基于数据矩阵的旋转。

代码语言:javascript
复制
# The default of heatmaply:
heatmaply(
  percentize(mtcars)[1:10, ],
  seriate = "OLO"
  #seriate = "GW"
  #seriate = "mean"
  #seriate = "none"
)

使用 dendextend 自定义树状图

用户可以使用 Rowv 和 Colv 参数为热图的行/列提供自己的树状图:

代码语言:javascript
复制
x  <- as.matrix(datasets::mtcars)
library("dendextend")
row_dend  <- x %>% 
  dist %>% 
  hclust %>% 
  as.dendrogram %>%
  set("branches_k_color", k = 3) %>% 
  set("branches_lwd", c(1, 3)) %>%
  ladderize

col_dend  <- x %>% 
  t %>% 
  dist %>% 
  hclust %>% 
  as.dendrogram %>%
  set("branches_k_color", k = 2) %>% 
  set("branches_lwd", c(1, 2)) %>%
  ladderize

heatmaply(
  percentize(x),
  Rowv = row_dend,
  Colv = col_dend
)

使用 RowSideColors 根据其他因素添加注释

代码语言:javascript
复制
x  <- as.matrix(datasets::mtcars)
rc <- colorspace::rainbow_hcl(nrow(x))
library("gplots")
library("viridis")
heatmap.2(
  x,
  trace = "none",
  col = viridis(100),
  RowSideColors = rc,
  key = FALSE
)
代码语言:javascript
复制
heatmaply(
  x[, -c(8, 9)],
  seriate = "mean",
  col_side_colors = c(rep(0, 5), rep(1, 4)),
  row_side_colors = x[, 8:9]
)

文本注释

heatmaply 的 cellnote 参数,可以显示覆盖在热图上的字符值。

代码语言:javascript
复制
heatmaply(
  mtcars,
  cellnote = mtcars
)

将热图保存到文件中

由于我们的图片是交互式的,我们可以用以下代码将热图的交互式版本保存到 HTML 文件中:

代码语言:javascript
复制
dir.create("folder")
heatmaply(mtcars, file = "folder/heatmaply_plot.html")
browseURL("folder/heatmaply_plot.html")

小编总结

作为诸多热图绘制R包中的一员,heatmaply可以绘制交互式的热图,其许多参数设置也和ggheatmap、pheatmap等常用的R包有联动,在色彩的美观度上也是非常优越,通过zoom in/zoom out也可以让我们方便的查看热图的细节,总的来说使用还是非常简单的,推荐给大家尝试!

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作图丫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档