今天学做一下一篇NC文章的figure1b,是一个热图,特点是FC高低用连续色彩表示,块的大小表示P值大小,这里我们用ggplot尝试做一下。
(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')
效果还是差不多的,只不过细节之处需要精雕细琢!
转自:KS科研分享与服务
如有侵权,请联系本站删除!