今天学做一下一篇NC文章的figure1b,是一个热图,特点是FC高低用连续色彩表示,块的大小表示P值大小,这里我们用ggplot尝试做一下。 ![](http://image109.360doc.com/DownloadImg/2022/07/0610/248067733_1_20220706102718331_wm.png)
(Reference:Senescent cells limit p53 activity via multiple
mechanisms to remain viable) NC文章原文作者提供了作图数据,本片文章的示例数据和注释代码我们已上传群文件,群成员可免费在群内获取!
首先分别读入FC和P值文件:
setwd("D:/热图") FC <- read.csv("FC.csv",header = T) pvalue <- read.csv("pvalue.csv",header = T)
作者提供的是宽数据,转化为ggplot作图需要的长数据:
library(tidyr) FC <-gather(FC, gene, FC, 2:5) FC pvalue <-gather(pvalue, gene, pvalue, 2:5) pvalue pvalue <- as.data.frame(pvalue[,3])
这里注意,作者提供的legend显示是-1到1,但是数据的log2FC并不是这样,所以我将其转化了一下,缩放到-1到1,但是结果与文章有初入,不太明白这里的原因:
library(dplyr) library(scales) FC <- FC %>% group_by(log2..fold.change.) %>% mutate(Data = rescale(FC, to = c(-1, 1))) %>% ungroup FC <- FC[,-3]
最后合并数据:
data <- cbind(FC, pvalue) colnames(data) <- c("group",'gene','FC','pvalue')
处理行名:
library(tidyverse) data <- separate(data = data, col = group, into = c("sh", "group"), sep = "sh") data <- data[,-1]
-log10P设置因子水平:
data$P[which(data$pvalue >0)] = '>0' data$P[which(data$pvalue >1.3)] = '>1.3'
作图:
library(forcats) data$group <- as.factor(data$group) data$group <- fct_inorder(data$group)
library(ggplot2) ggplot(data=data,aes(x=gene,y=group))+ geom_point(aes(size=P, fill=FC), shape=22, color='grey80')+ scale_fill_gradient2(low="#445393", high="#EE2627", mid="white")+ theme_bw()+ theme(panel.grid.major= element_blank(), panel.grid.minor= element_blank(), plot.title = element_text(hjust = 0.5, size = 12), axis.text.y =element_text(size = 12, color = "black"), axis.text.x.top=element_text(angle=90,hjust = 0,vjust = 0.1, color = 'black',size = 10), axis.ticks = element_blank(), legend.key.size = unit(0.15, "inches"))+ labs(x="",y=NULL)+ scale_size_discrete(range=c(2,8))+ scale_x_discrete(position = 'top')
![](http://image109.360doc.com/DownloadImg/2022/07/0610/248067733_2_20220706102718581_wm.png)
效果还是差不多的,只不过细节之处需要精雕细琢! 注意:
|