生物信息学文章的发表要求除了思路和热点以外,图片绘制是否精美也是十分重要的,本专栏为(生物信息学)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:
- setwd("C:\\")
- dir()
- data <- read.csv("CHOL_lcpm.csv",header = T,sep = ",")
- data[1:5,1:5]
-
-
- # > data[1:5,1:5]
- # X TCGA.ZD.A8I3.01A TCGA.W5.AA30.01A TCGA.W5.AA38.01A TCGA.YR.A95A.01A
- #1 DDX11L1 -5.06306022 -5.0630602 -4.4599707 -5.0630602
- #2 WASH7P 0.03949386 0.7319996 -0.1783097 0.4494518
- #3 MIR6859-3 -4.56550277 -2.7102929 -4.4599707 -4.4818534
- #4 RP11-34P13.3 -5.06306022 -5.0630602 -5.0630602 -4.4818534
- #5 MIR1302-9 -5.06306022 -5.0630602 -5.0630602 -5.0630602
提取CDK1和CCNB1两个基因,然后将基因名变成行名,并将数据转置:
- gene <- c("CDK1","CCNB1")
- data <- data[data$X %in% gene,]
- data[1:2,1:5]
- rownames(data) <- data$X
- data <- data[,-1]
- data <- as.data.frame(t(data))
- head(data)
-
-
- # > head(data)
- # CCNB1 CDK1
- #TCGA.ZD.A8I3.01A 3.909019 3.498481
- #TCGA.W5.AA30.01A 4.003472 3.694219
- #TCGA.W5.AA38.01A 4.307981 3.412562
- #TCGA.YR.A95A.01A 2.832581 3.711939
- #TCGA.W5.AA36.01A 3.996200 3.477425
- #TCGA.W5.AA2U.01A 4.174076 3.358181
然后提取肿瘤样本,针对TCGA,可以用以下正则表达式,针对其他数据,那我们需要将准备一个cluster文件,里面标记好哪个样本名对应的是肿瘤还是正常样本:
先用正则表达式:
- dim(data)
- data <- data[grep("^TCGA[.-]([0-9a-zA-Z]{2})[.-]([0-9a-zA-Z]{4})[.-]([0])",rownames(data)),]
- dim(data)
-
-
-
- # > dim(data)
- #[1] 45 2
- #> data <- data[grep("^TCGA[.-]([0-9a-zA-Z]{2})[.-]([0-9a-zA-Z]{4})[.-]([0])",rownames(data)),]
- #> dim(data)
- #[1] 36 2
可以看到提取前后样本发生变化,肿瘤样本有36个,剔除9个正常样本。
另一种方法就是准备好以下excel文件,把哪些是肿瘤样本哪些是正常样本都写好:
科普一下:
确认肿瘤样本和正常样本主要看红框位置,1开头就是正常,0开头就是肿瘤。
准备好以后保存一下:
然后用下面代码匹配肿瘤数据:
- dir()
- cluster <- read.csv("Cluster.csv",header = T,sep = ",")
- head(cluster)
- cluster <- cluster[which(cluster$Type=="Tumor"),]
- data <- data[match(cluster$SampleID,rownames(data)),]
- dim(data)
-
-
- # > dim(data)
- #[1] 36 2
两种方法选其一即可,个人觉得第二种大家更容易理解,也适用于其他的数据,包括GEO,ICGC等等数据。
下面绘制散点图:
最简单的绘制方法就是plot:
plot(data$CCNB1,data$CDK1) ### 这种绘图方式所画出来的图不好看,所以我们就用ggplot来进行绘制。
不过这个图太丑,我们用ggplot2绘制:
我们先拟合一个线性模型:
- model <- lm(data$CCNB1~data$CDK1,data = data)
- summary(model)
-
-
- #> summary(model)
-
- #Call:
- #lm(formula = data$CCNB1 ~ data$CDK1, data = data)
-
- #Residuals:
- # Min 1Q Median 3Q Max
- #-1.55999 -0.26491 0.05926 0.35073 1.17025
-
- #Coefficients:
- # Estimate Std. Error t value Pr(>|t|)
- #(Intercept) 1.52431 0.30763 4.955 1.96e-05 ***
- #data$CDK1 0.65840 0.08765 7.511 1.02e-08 ***
- #---
- #Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
-
- #Residual standard error: 0.568 on 34 degrees of freedom
- #Multiple R-squared: 0.624, Adjusted R-squared: 0.6129
- #F-statistic: 56.42 on 1 and 34 DF, p-value: 1.016e-08
线性模型提示,两个基因相关度很高,达到0.65840,P值有意义:
计算一下两个基因的相关性,我们用Pearson相关系数计算:
- cor <- cor.test(data$CDK1,data$CCNB1,method = "pearson")
- cor
-
-
- # > cor
-
- # Pearson's product-moment correlation
-
- #data: data$CDK1 and data$CCNB1
- #t = 7.5115, df = 34, p-value = 1.016e-08
- #alternative hypothesis: true correlation is not equal to 0
- #95 percent confidence interval:
- # 0.623098 0.888008
- #sample estimates:
- # cor
- #0.7899277
相关性为0.7899,P值有意义:
这些都是散点图绘图中重要的信息,下面绘制散点图:
我准备了两套代码,大家可以直接用:
第一套代码如下:
- library(ggplot2)
- a <- ggplot(data = data,aes(x = data$CCNB1,y = data$CDK1))+
- geom_point(shape = 19,color = "dodgerblue")+labs(y = "CDK1",x = "CCNB1")
- a
- b <- a+theme_bw()
- b
- c <- b+theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank())
- c
- d <- c+stat_smooth(method = lm,se = F,colour = "red")
- d
- g <- d+theme(plot.title = element_text(hjust = 0.5,size = 14,face = "bold"),
- axis.title.y.left = element_text(size = 14,face = "bold"),
- axis.title.x.bottom = element_text(size = 14,face = "bold",
- vjust = 0))
-
- g
- h <- g+theme(axis.text.x.bottom = element_text(size = 10,face = "bold"))
- h
-
- i <- h +theme(axis.text.y.left = element_text(size = 10,face = "bold",
- vjust = 0.5,hjust = 0.5,
- angle = 90,colour = "black"))
-
- i
输入图片如下:
下一套代码:
- library(ggplot2)
- a <- ggplot(data = data,aes(x = data$CCNB1,y = data$CDK1))+
- geom_point(shape = 19,color = "dodgerblue")+labs(y = "CDK1",x = "CCNB1")
- a
- d <- a+stat_smooth(method = lm,se = F,colour = "red")
- d
- g <- d+theme(plot.title = element_text(hjust = 0.5,size = 14,face = "bold"),
- axis.title.y.left = element_text(size = 14,face = "bold"),
- axis.title.x.bottom = element_text(size = 14,face = "bold",
- vjust = 0))
-
- g
- h <- g+theme(axis.text.x.bottom = element_text(size = 10,face = "bold"))
- h
-
- i <- h +theme(axis.text.y.left = element_text(size = 10,face = "bold",
- vjust = 0.5,hjust = 0.5,
- angle = 90,colour = "black"))
-
- i
输入图片如下:
这里大家需要自行改动的地方就是自己的基因,还有颜色不喜欢也可以自己改动,具体颜色参考之前的一篇文章:
R语言中主要的颜色对照图_楷然教你学生信的博客-CSDN博客_r语言色块
红色框是大家可以进行改动的,其他的没必要改动,都设置好了:
export输出图片pdf格式,选择5inch*5inch即可。
下面,我们还需要进一步对输出的图片进行处理,使用Photoshop和AI都行,将之前的那些信息加上,相关性和P值: