学术资讯 » 学术资源

  • 首 页
  • 期刊选题
  • 期刊点评
  • 期刊大全
  • 学人博客
  • 编辑征稿
  • 投稿选刊
  • 万维群组
  • 学术会议
  • 万维读书
  • SCI/E期刊
  • SSCI期刊
  • AHCI期刊
  • 复现NC图表:ggplot做热图|数据处理|图表设置

    阅读: 2022/7/8 14:20:27

    今天学做一下一篇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科研分享与服务

    如有侵权,请联系本站删除!


    浏览(599)
    点赞(0)
    收藏(0)
  • 上一篇:【分享】选题必读:国务院印发关于加强数字政府建设的指导意见

    下一篇:关于申报2023年度吉林省教育厅科学研究项目的通知

  • 首页

  • 文章

  • 期刊

  • 帮助

  • 我的

版权所有 Copyright@2023    备案号:豫ICP备2021036211号