• (生物信息学)R语言绘图初级——3-5分文章必备——散点图


    生物信息学文章的发表要求除了思路和热点以外,图片绘制是否精美也是十分重要的,本专栏为(生物信息学)R语言绘图初级——3-5分文章必备,主要通过大量文献,总结3-5分文章中高频出现的各种图片,并给大家提供图片复现的R语言代码,及图片识读。

    本专栏将向大家介绍的图片绘制如下:

    1. 散点图

    2. 箱线图

    3.条形图

    4.正负条形图

    5.区组条形图

    6.小提琴图

    7.热图

    8.Venn图

    9.生存曲线

    10.森林图

    11.TSNE

    12.瀑布图

    13.ROC曲线

    14.点阵图

    15.相关系数图

    16.饼图

    17.树形图

    18.气泡图

    19.火山图

    20.点图

    今天绘制散点图,我们用的数据是我的资源中的数据:

    楷然教你学生信的博客_CSDN博客-生物信息学,R语言与临床模型预测全套分析流程,生物信息学相关数据库介绍领域博主

    数据均来自TCGA,但格式已转换成LCPM,即log2(CPM+1),因为发SCI生信论文要求。大家也可以准备自己的数据。

    下面我们下载一个CHOL胆管癌数据:

    TCGA-CHOL-mRNA表达数据——胆管癌表达及临床数据集整理_tcga临床数据整理-数据挖掘文档类资源-CSDN下载

     数据中包含两个文件,一个是临床文件,一个是LCPM表达文件,因为此处只是绘制散点图,我们只需要CHOL_LCPM表达文件。

     

     在读取代码之前,我们讲一下散点图的用途,最简单的用途就是分析两个基因的相关性,如果两个基因相关性高,那么我们认为它们之间可能存在共表达关系,但是具体还需要实验进一步验证。

    散点图绘制中,需要计算相关性,主要有pearson和spearman两种计算方法,具体的选择可以参见之前的一篇文章。

    还有,我们下载的数据是TCGA数据,有肿瘤和正常样本的表达,我们在计算相关性时,需要将肿瘤样本提取出来,我们计算的是肿瘤样本的相关性。

    下面我们读取数据,随便选两个基因,比如我们选两个周期蛋白的基因CDK1和CCNB1:

    1. setwd("C:\\")
    2. dir()
    3. data <- read.csv("CHOL_lcpm.csv",header = T,sep = ",")
    4. data[1:5,1:5]
    5. # > data[1:5,1:5]
    6. # X TCGA.ZD.A8I3.01A TCGA.W5.AA30.01A TCGA.W5.AA38.01A TCGA.YR.A95A.01A
    7. #1 DDX11L1 -5.06306022 -5.0630602 -4.4599707 -5.0630602
    8. #2 WASH7P 0.03949386 0.7319996 -0.1783097 0.4494518
    9. #3 MIR6859-3 -4.56550277 -2.7102929 -4.4599707 -4.4818534
    10. #4 RP11-34P13.3 -5.06306022 -5.0630602 -5.0630602 -4.4818534
    11. #5 MIR1302-9 -5.06306022 -5.0630602 -5.0630602 -5.0630602

    提取CDK1和CCNB1两个基因,然后将基因名变成行名,并将数据转置:

    1. gene <- c("CDK1","CCNB1")
    2. data <- data[data$X %in% gene,]
    3. data[1:2,1:5]
    4. rownames(data) <- data$X
    5. data <- data[,-1]
    6. data <- as.data.frame(t(data))
    7. head(data)
    8. # > head(data)
    9. # CCNB1 CDK1
    10. #TCGA.ZD.A8I3.01A 3.909019 3.498481
    11. #TCGA.W5.AA30.01A 4.003472 3.694219
    12. #TCGA.W5.AA38.01A 4.307981 3.412562
    13. #TCGA.YR.A95A.01A 2.832581 3.711939
    14. #TCGA.W5.AA36.01A 3.996200 3.477425
    15. #TCGA.W5.AA2U.01A 4.174076 3.358181

     然后提取肿瘤样本,针对TCGA,可以用以下正则表达式,针对其他数据,那我们需要将准备一个cluster文件,里面标记好哪个样本名对应的是肿瘤还是正常样本:

    先用正则表达式:

    1. dim(data)
    2. data <- data[grep("^TCGA[.-]([0-9a-zA-Z]{2})[.-]([0-9a-zA-Z]{4})[.-]([0])",rownames(data)),]
    3. dim(data)
    4. # > dim(data)
    5. #[1] 45 2
    6. #> data <- data[grep("^TCGA[.-]([0-9a-zA-Z]{2})[.-]([0-9a-zA-Z]{4})[.-]([0])",rownames(data)),]
    7. #> dim(data)
    8. #[1] 36 2

     可以看到提取前后样本发生变化,肿瘤样本有36个,剔除9个正常样本。

    另一种方法就是准备好以下excel文件,把哪些是肿瘤样本哪些是正常样本都写好:


     科普一下:

     

     确认肿瘤样本和正常样本主要看红框位置,1开头就是正常,0开头就是肿瘤。

    准备好以后保存一下:

     然后用下面代码匹配肿瘤数据:

    1. dir()
    2. cluster <- read.csv("Cluster.csv",header = T,sep = ",")
    3. head(cluster)
    4. cluster <- cluster[which(cluster$Type=="Tumor"),]
    5. data <- data[match(cluster$SampleID,rownames(data)),]
    6. dim(data)
    7. # > dim(data)
    8. #[1] 36 2

    两种方法选其一即可,个人觉得第二种大家更容易理解,也适用于其他的数据,包括GEO,ICGC等等数据。

    下面绘制散点图:

    最简单的绘制方法就是plot:

    plot(data$CCNB1,data$CDK1) ### 这种绘图方式所画出来的图不好看,所以我们就用ggplot来进行绘制。
    

    不过这个图太丑,我们用ggplot2绘制:

     我们先拟合一个线性模型:

    1. model <- lm(data$CCNB1~data$CDK1,data = data)
    2. summary(model)
    3. #> summary(model)
    4. #Call:
    5. #lm(formula = data$CCNB1 ~ data$CDK1, data = data)
    6. #Residuals:
    7. # Min 1Q Median 3Q Max
    8. #-1.55999 -0.26491 0.05926 0.35073 1.17025
    9. #Coefficients:
    10. # Estimate Std. Error t value Pr(>|t|)
    11. #(Intercept) 1.52431 0.30763 4.955 1.96e-05 ***
    12. #data$CDK1 0.65840 0.08765 7.511 1.02e-08 ***
    13. #---
    14. #Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    15. #Residual standard error: 0.568 on 34 degrees of freedom
    16. #Multiple R-squared: 0.624, Adjusted R-squared: 0.6129
    17. #F-statistic: 56.42 on 1 and 34 DF, p-value: 1.016e-08

    线性模型提示,两个基因相关度很高,达到0.65840,P值有意义:

     计算一下两个基因的相关性,我们用Pearson相关系数计算:

    1. cor <- cor.test(data$CDK1,data$CCNB1,method = "pearson")
    2. cor
    3. # > cor
    4. # Pearson's product-moment correlation
    5. #data: data$CDK1 and data$CCNB1
    6. #t = 7.5115, df = 34, p-value = 1.016e-08
    7. #alternative hypothesis: true correlation is not equal to 0
    8. #95 percent confidence interval:
    9. # 0.623098 0.888008
    10. #sample estimates:
    11. # cor
    12. #0.7899277

    相关性为0.7899,P值有意义:

    这些都是散点图绘图中重要的信息,下面绘制散点图:

    我准备了两套代码,大家可以直接用: 

    第一套代码如下:

    1. library(ggplot2)
    2. a <- ggplot(data = data,aes(x = data$CCNB1,y = data$CDK1))+
    3. geom_point(shape = 19,color = "dodgerblue")+labs(y = "CDK1",x = "CCNB1")
    4. a
    5. b <- a+theme_bw()
    6. b
    7. c <- b+theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank())
    8. c
    9. d <- c+stat_smooth(method = lm,se = F,colour = "red")
    10. d
    11. g <- d+theme(plot.title = element_text(hjust = 0.5,size = 14,face = "bold"),
    12. axis.title.y.left = element_text(size = 14,face = "bold"),
    13. axis.title.x.bottom = element_text(size = 14,face = "bold",
    14. vjust = 0))
    15. g
    16. h <- g+theme(axis.text.x.bottom = element_text(size = 10,face = "bold"))
    17. h
    18. i <- h +theme(axis.text.y.left = element_text(size = 10,face = "bold",
    19. vjust = 0.5,hjust = 0.5,
    20. angle = 90,colour = "black"))
    21. i

    输入图片如下:

     下一套代码:

    1. library(ggplot2)
    2. a <- ggplot(data = data,aes(x = data$CCNB1,y = data$CDK1))+
    3. geom_point(shape = 19,color = "dodgerblue")+labs(y = "CDK1",x = "CCNB1")
    4. a
    5. d <- a+stat_smooth(method = lm,se = F,colour = "red")
    6. d
    7. g <- d+theme(plot.title = element_text(hjust = 0.5,size = 14,face = "bold"),
    8. axis.title.y.left = element_text(size = 14,face = "bold"),
    9. axis.title.x.bottom = element_text(size = 14,face = "bold",
    10. vjust = 0))
    11. g
    12. h <- g+theme(axis.text.x.bottom = element_text(size = 10,face = "bold"))
    13. h
    14. i <- h +theme(axis.text.y.left = element_text(size = 10,face = "bold",
    15. vjust = 0.5,hjust = 0.5,
    16. angle = 90,colour = "black"))
    17. i

    输入图片如下:

     这里大家需要自行改动的地方就是自己的基因,还有颜色不喜欢也可以自己改动,具体颜色参考之前的一篇文章:

    R语言中主要的颜色对照图_楷然教你学生信的博客-CSDN博客_r语言色块

    红色框是大家可以进行改动的,其他的没必要改动,都设置好了:

    export输出图片pdf格式,选择5inch*5inch即可。

     下面,我们还需要进一步对输出的图片进行处理,使用Photoshop和AI都行,将之前的那些信息加上,相关性和P值:

  • 相关阅读:
    Oracle/PLSQL: VSize Function
    芒格-“永远不要有受害者心态”
    数据分析学习记录(二)---响应曲面法及Design-Expert的简单使用
    Linux驱动模型之注册设备
    pandas的一些函数
    Linux驱动开发入门
    力扣日记11.7-【二叉树篇】二叉树的层序遍历
    Flask高级视图_蓝图模板,静态文件,url_for的实战
    ThingsBoard IoT Gateway MQTT 连接器配置 第二部分
    C# redis通过stream实现消息队列以及ack机制
  • 原文地址:https://blog.csdn.net/weixin_46500027/article/details/125001884