热图 -- pheatmap or ggplot2

69 篇文章 2 订阅
文章详细介绍了如何在R中使用pheatmap和ggplot2包创建热图,包括数据准备、数据缩放、取消聚类、调整方格大小、改变聚类方法、调整颜色方案以及修改图例等步骤。此外,还展示了如何在ggplot2中添加groupbar和制作dotplot,并解决了pheatmap与cowplot组合绘图时的问题。
摘要由CSDN通过智能技术生成

brief

这里主要记录了pheatmap 以及 ggplot2实现热图的步骤:
在这里插入图片描述

数据准备

df_ <- df2[1:50,2:13]
df_ <- apply(df_,MARGIN = 2,FUN = as.numeric)
df_

pheatmap::pheatmap(df_)

在这里插入图片描述

pheatmap实例

最朴素的方式

pheatmap::pheatmap(df_)

数据缩放

pheatmap::pheatmap(df_,scale = "column") # scale = "column" / "raw" / "none" 按照行/列进行数据的缩放

取消聚类

pheatmap::pheatmap(df_,cluster_rows = F,cluster_cols = F)

更改每个小方格的大小

pheatmap::pheatmap(df_,cluster_rows = F,cluster_cols = F,cellwidth = 20,cellheight = 20)

聚类以及聚类方式和参数

pheatmap::pheatmap(df_,cluster_rows = T,clustering_distance_rows = "correlation",
                   cluster_cols = T,clustering_distance_cols = "manhattan"
                   ,clustering_method = "median")
# clustering method has to one form the list: 'ward', 'ward.D', 'ward.D2', 'single',
 'complete', 'average', 'mcquitty', 'median' or 'centroid'.
# 也就是层次聚类中计算距离的方法

修改热图呈现的颜色

pheatmap::pheatmap(df_,color = c('#6699CC','#FFFF99','#CC3333'))

修改legend

pheatmap::pheatmap(df_,legend = T,legend_breaks = c(-3,0,3))  # 自己指定legend在什么位置标数字
pheatmap::pheatmap(df_,legend = T,legend_labels = c("h","m","l")) # 自己指定legend标记的字符
# 当然了还有很多参数,用的时候再看吧
pheatmap::pheatmap(df_,show_colnames = T,show_rownames = T)

ggplot2实例

哪ggplot2可以实现热图嘛?

# 先把长格式数据转变为宽格式数据
df_ <- reshape2::melt(df_)
df_

在这里插入图片描述

p1<-ggplot(df_,aes(x=Var2,y=Var1,fill=value))+
  xlab("")+
  ylab("")
p1

p2 <- p1+geom_raster()+
  scale_fill_gradient2(low="#003366", high="#990033", mid="white")+
  theme_minimal()
p2

# geom_raster() geom_rect() and geom_tile() do the same thing ,都是画小方块的,参数不同
# Scales control the details of how data values are translated to visual properties
# scale_*_gradient creates a two colour gradient (low-high), 
# scale_*_gradient2 creates a diverging colour gradient (low-mid-high),
#  scale_*_gradientn creates a n-colour gradient

在这里插入图片描述

ggplot2实例变式

添加 group bar

df_ <- df2[1:50,2:13]
df_ <- as.data.frame(apply(df_,MARGIN = 2,FUN = as.numeric))
df_

group <- colnames(df_) %>% as.data.frame() %>% 
  mutate(group=c(rep("ST",3),rep("TZ",3),rep("TL",3),rep("TS",3))) %>%
  mutate(p="group") %>%
  ggplot(aes(.,y=p,fill=group))+
  geom_tile() + 
  scale_y_discrete(position="right") +
  theme_minimal()+xlab(NULL) + ylab(NULL) +
  theme(axis.text.x = element_blank())+
  labs(fill = "Group")


#画热图并将以上信息添加进去:
# 先把长格式数据转变为宽格式数据
df_ <- df2[1:50,2:13]
df_ <- apply(df_,MARGIN = 2,FUN = as.numeric)
df_ <- reshape2::melt(df_)
df_

p1<-ggplot(df_,aes(x=Var2,y=Var1,fill=value)) #热图绘制
p2 <- p1+geom_raster()+scale_fill_gradient2(low="#003366", high="#990033", mid="white")+
  geom_tile()+theme_minimal()+
  theme(axis.text.x =element_text(angle =90,hjust =0.5,vjust = 0.5))+
  xlab(NULL) + ylab(NULL)
p2 %>%
  aplot::insert_top(group, height = .05)

在这里插入图片描述

做成dotplot

p1<-ggplot(df_,aes(x=Var1,y=Var2,fill=value))+
  xlab("")+
  ylab("")

p3 <- p1+scale_color_gradientn(values = seq(0,1,0.2),colours = c('#6699CC','#FFFF99','#CC3333'))+
  theme_bw()+
  geom_point(aes(size=value,color=value))+
  guides(fill="none",color="none",size="none")+
  theme(panel.grid = element_blank(),
        axis.text.x =element_text(angle =45,hjust =1))
p3

在这里插入图片描述

pheatmap 多图组合问题

这部分内容来自:https://www.jianshu.com/p/8fc823c39488

在进行多图绘制的时候,用cowplot::plot_grid函数进行多图组合,结果在多图组合的时候,别的ggplot画图的对象没有任何问题,但是pheatmap的出现问题,并抛出如下警告信息:

p4<-cowplot::plot_grid(p1, p2, p3, ncol=1, labels=LETTERS[1:3])
Warning message:
In as_grob.default(plot) :
  Cannot convert object of class pheatmap into a grob.

cowplot::plot_grid多图组合的话,必须得是ggplot对象,而pheatmap不是ggplot对象,因此才会出现此问题。解决办法如下:

library(pheatmap)
test <- matrix(rnorm(200), 20, 10)
mfs <- mfs_ma <- mfs_fe <- pheatmap(test)
cowplot::plot_grid(mfs$gtable, mfs_ma$gtable, mfs_fe$gtable,
                   ncol= 3, labels=LETTERS[1:3])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值