暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

R语言绘图|热图添加自定义聚类标签

1227
点击关注了解更多哦

本文主要介绍在使用pheatmap包绘制热图的过程中,如何添加自定义聚类标签。如以2001-2020年31个省份的人均GDP数据为例,进行聚类并添加不同省份对应的地区标签,如下图所示。数据来自国家统计局[1]

1、数据准备

library(tidyverse)
library(pheatmap)
dta <- readxl::read_xlsx("GDPdf.xlsx")
head(dta)
  # # A tibble: 6 x 4
  # province region    year PerGDP
  # <chr>    <chr>    <dbl>  <dbl>
  #   1 北京     东部地区  2020 164889
  # 2 天津     东部地区  2020 101614
  # 3 河北     东部地区  2020  48564
  # 4 山西     中部地区  2020  50528
  # 5 内蒙     西部地区  2020  72062
  # 6 辽宁     东北地区  2020  58872
str(dta)
  # tibble [620 x 4] (S3: tbl_df/tbl/data.frame)
  # $ province: chr [1:620] "北京" "天津" "河北" "山西" ...
  # $ region  : chr [1:620] "东部地区" "东部地区" "东部地区" "中部地区" ...
  # $ year    : num [1:620] 2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 ...
  # $ PerGDP  : num [1:620] 164889 101614 48564 50528 72062 ...
dim(dta)
  # [1] 620   4

# 转换为矩阵数据
heatmap_dta <- dta %>% reshape2::dcast(province ~ year, value.var = "PerGDP") %>% 
  arrange(province) %>% column_to_rownames(var = "province") %>% as.matrix()
head(heatmap_dta)
  # 2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012   2013   2014   2015   2016   2017   2018   2019   2020
  # 安徽  5732  6238  7001  8279  9193 10630 12989 15535 17715 21923 27314 30683  34256  37184  38983  42641  47671  54078  58072  63426
  # 北京 28097 32231 36583 42402 47182 53438 63629 68541 71059 78307 86365 93078 101023 107472 114662 124516 137596 153095 164563 164889
  # 福建 11883 12910 14330 16248 18107 20915 25915 30153 33999 40773 48341 54073  59835  65810  70162  76778  86943  98542 106966 105818
  # 甘肃  4467  4875  5525  6512  7332  8653 10501 12048 12802 15421 18801 20978  23313  25202  25264  26520  28026  30797  32995  35995
  # 广东 13952 15478 17950 20647 23997 27861 33236 37543 39418 44669 50676 54038  58860  63809  69283  75213  82686  88781  94448  88210
  # 广西  5058  5559  6120  7182  8069  9421 11542 13471 14708 18070 22258 24238  26483  28687  30990  33458  36595  40012  42964  44309
str(heatmap_dta)
  # num [1:31, 1:20] 5732 28097 11883 4467 13952 ...
  # - attr(*, "dimnames")=List of 2
  # ..$ : chr [1:31] "安徽" "北京" "福建" "甘肃" ...
  # ..$ : chr [1:20] "2001" "2002" "2003" "2004" ...
dim(heatmap_dta)
  # [1] 31 20

复制

2、热图绘制

pheatmap(heatmap_dta)

复制

3、添加聚类标签

# 设置省份所属地区
region_class <- dta %>% filter(year == 2020) %>% select(province, region) %>% arrange(province) %>% column_to_rownames(var = "province")
region_class
  # region
  # 安徽   中部地区
  # 北京   东部地区
  # 福建   东部地区
  # 甘肃   西部地区
  # 广东   东部地区
  # 广西   西部地区
  # 贵州   西部地区
  # 海南   东部地区

# 设置每个地区的颜色类别
ann_colors = list(region = c(东部地区 = "#E41A1C", 中部地区 = "#377EB8", 西部地区 = "#4DAF4A", 东北地区 = "#984EA3"))
ann_colors
  # $region
  # 东部地区  中部地区  西部地区  东北地区 
  # "#E41A1C" "#377EB8" "#4DAF4A" "#984EA3" 

复制

4、含有自定义聚类标签的热图

pheatmap(heatmap_dta, annotation_row = region, annotation_colors = ann_colors)

复制

可以发现,省份的聚类结果与我国四大地区划分具有一定的重合性,区域经济的空间差异较为明显。

5、tips

在添加自定义标签的过程,务必注意聚类数据库的行名必须与矩阵的行名保持一致。

其他

更多内容可关注微信公众号【日常分享的小懒猫】


如有帮助请多多点赞哦!

参考资料

[1]

国家统计局: https://data.stats.gov.cn/index.htm


文章转载自日常分享的小懒猫,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论