[R 01] 不要一直用ggplot2啦,尝试用ggpubr画图吧!

[R 01] 不要一直用ggplot2啦,尝试用ggpubr画图吧!

一直都用 ggplot2 画图,突然看到 ggpubr 画的图也不错,就整理出来分享一下~

正好作为R语言系列的第一篇吧~

ggpubr 实际上是基于ggplot2 开发出来的包,目的是为了简化ggplot2的操作,便于画出满足论文出版要求的图。

ggplot2, by Hadley Wickham, is an excellent and flexible package for elegant data visualization in R. However the default generated plots requires some formatting before we can send them for publication. Furthermore, to customize a ggplot, the syntax is opaque and this raises the level of difficulty for researchers with no advanced R programming skills.
The ‘ggpubr’ package provides some easy-to-use functions for creating and customizing ‘ggplot2’- based publication ready plots.


一、安装ggplot2和ggpubr

install.packages("ggplot2")
install.packages("ggpubr")

首先在R里面安装这两个包~


二、ggpubr基本绘图函数

传送门rpkgs.datanovia.com/ggp

1.Plot One Variable - X, Continuous

什么是QQ图?
QQ图,实际上就是理论值(X轴)与实际值(Y轴)的关系图。
如果理论值和实际值相等,即为一条直线,那么就可以认为符合正态分布。

参考:blog.csdn.net/u01394679
QQ图,判断数据是否为正态分布


2. Plot Two Vriables - X and Y, Discrete X and Continuous Y

小提琴图和箱图嵌套
strip chart
ggerrorplot() 误差棒图
# Load data
data("mtcars")
df <- mtcars
df$cyl <- as.factor(df$cyl)
df$name <- rownames(df)
head(df[, c("wt", "mpg", "cyl")], 3)

# Change colors by  group cyl
ggdotchart(df, x = "name", y = "mpg",
   group = "cyl", color = "cyl",
   palette = c('#999999','#E69F00','#56B4E9'),
   rotate = TRUE,
   sorting = "descending",
   ggtheme = theme_bw(),
   y.text.col = TRUE )


3. 更多

stat_cor()
stat_stars()
ggscatterhist()
ggpaired()

Make MA-plot which is a scatter plot of log2 fold changes (on the y-axis) versus the mean expression signal (on the x-axis).

MA plot充分展示了基因丰度和表达变化之间的关系。我们可以看到,越靠左下或者右上的点,就是丰度越高而且变化幅度越大的基因。当然了,MA plot就丢了FDR这类统计量。二维图嘛,死活两个参数,顶多用颜色做个假三维。
不过对于终端小白用户来说,如果在volcano plot和MA plot中发现了重叠的靶点(实际上会有不少重叠),那就愉快地拿去做实验吧。

参考:聊聊转录组测序——3.数据可视化及基因功能注释. 老司机的生物学课堂. 吴思涵.
  • 基因丰度:基因组中某基因的拷贝数。
  • 基因表达丰度:某基因转录的mRNA数量。可以用RT-qPCR来检测。
  • 表达变化(fold change):就是倍数变化,假设A基因表达值为1,B表达值为3,那么B的表达就是A的3倍。一般我们都用count、TPM或FPKM来衡量基因表达水平,所以基因表达值肯定是非负数,那么fold change的取值就是(0, +∞).
  • 差异的显著性:P-value来衡量。假设检验首先必须要有假设,我们假设A和B的表达没有差异(H0,零假设),然后基于此假设,通过t test(以RT-PCR为例)算出我们观测到的A和B出现的概率,就得到了P-value,如果P-value<0.05,那么说明小概率事件出现了,我们应该拒绝零假设,即A和B的表达不一样,即有显著差异。

三、进阶,用函数画箱图和小提琴图

#加载包
library(ggplot2)
library(ggpubr)

#画箱图和小提琴图的函数
drawBoxplot <- function(gene,plotType,pValLabelY){
  boxData <- read.table(paste(gene,"_boxplot.txt",sep=""),header = TRUE, sep="\t") # paste连接字符串
  #log2(boxData$FPKM+0.001)
  if(typeof(boxData$logFPKM)=="NULL"){ #判断是否存在boxData$logFPKM
    boxData$logFPKM=log2(boxData$FPKM+0.001)
  }
  if(plotType == "boxplot"){
    ggboxplot(boxData, x="Type", y="logFPKM", fill="Type", xlab="Type", ylab="log2(FPKM+0.001)",
      order=c("Normal", "Tumor")+
      scale_y_continuous(breaks = seq(from=-1,to=8,by=1) # y坐标轴间隔设置
                         #limits = c(5,-12) # y坐标轴区间,最好不要设置,以免出错
      )+
      theme(legend.direction = "vertical",
            legend.position = "right") +
      stat_compare_means(method = "t.test", #加上P值,T-test
                         label.y=pValLabelY) #设置P值的位置
  }else if(plotType == "violin"){
    ggviolin(boxData, x="Type", y="logFPKM", fill="Type", xlab="Type", ylab="log2(FPKM+0.001)")+
      scale_y_continuous(breaks = seq(from=-1,to=8,by=1) # y坐标轴间隔设置
                         #limits = c(5,-12) # y坐标轴区间,最好不要设置,以免出错
      )+
      theme(legend.direction = "vertical",
            legend.position = "right") +
      stat_compare_means(method = "t.test", #加上P值,T-test
                         label.y=pValLabelY) #设置P值的位置
  }else if(plotType == "boxplotviolin"){
    ggviolin(boxData, x="Type", y="logFPKM", fill="Type", xlab="Type", ylab="log2(FPKM+0.001)",
             add = "boxplot", add.params = list(fill = "white"))+
      scale_y_continuous(breaks = seq(from=-1,to=8,by=1) # y坐标轴间隔设置
                         #limits = c(5,-12) # y坐标轴区间,最好不要设置,以免出错
      )+
      theme(legend.direction = "vertical",
            legend.position = "right") +
      stat_compare_means(method = "t.test", #加上P值,T-test
                         label.y=pValLabelY) #设置P值的位置
  }
}

# 画图
gene<-"TP53"
dir<-paste("./boxplot/",gene,sep="")
plotType<-"violin" # boxplot or violin or boxplotviolin
pValLabelY <- 8 #设置P值的位置

setwd(dir) # paste连接字符串
getwd() # 查看当前路径

pdf(file=paste(gene,"_",plotType,".pdf",sep=""),width=6, height=6) #将图形存储为PDF
drawBoxplot(gene,plotType,pValLabelY) #调用函数
View(boxData) #查看数据
dev.off()

这样就大功告成啦~

要注意的一个小技巧是,在ggplot2中,如果我们要改变顺序可以使用levels:

#boxData$Type 是因子类型,ggplot2和ggpubr作图的顺序就是按照这个因子水平的顺序来的
boxData$Type=factor(boxData$Type, levels=c("Normal", "Tumor"))

但在ggpubr中,只需要用order函数即可:

ggboxplot(boxData, x="Type", y="logFPKM", fill="Type", xlab="Type", ylab="log2(FPKM+0.001)",
      order=c("Normal", "Tumor")


以上~

o(* ̄▽ ̄*)ブ

欢迎点赞和关注~


阅读更多:


参考:

  1. rpkgs.datanovia.com/ggp
  2. zhuanlan.zhihu.com/p/27
  3. biotrainee.com/thread-2
  4. 差异表达基因分析:差异倍数(fold change), 差异的显著性(P-value) | 火山图. Digital-LI.
  5. medical-dictionary.thefreedictionary.com

发布于 2020-01-15 15:55