分享

复现NC图表:ggplot做热图|数据处理|图表设置

 TS的美梦 2022-07-06 发布于重庆

今天学做一下一篇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)FCpvalue <-gather(pvalue, gene, pvalue, 2:5)pvaluepvalue <- 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))) %>%  ungroupFC <- 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')

效果还是差不多的,只不过细节之处需要精雕细琢!

注意:

详情请联系作者:

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约