基于ggplot2的RNA-seq转录组可视化:总述和分文目录
本系列文章的目的:我将首先简要介绍一下ggplot2的基本思路,然后使用前面介绍的TCGA数据模仿articles中的图片进行数据可视化。
其他文章一览:
从TCGA数据库下载并整合清洗高通量肿瘤表达谱-临床性状数据
TCGA数据整合后进行DESeq2差异表达分析和基于R的多种可视化
TCGA数据差异分析后生存分析(批量单因素cox回归/Lasso筛选,多因素cox建模,时间依赖ROC曲线及KM plot可视化)
TCGA转录组差异分析后多种基因功能富集分析:从GO/KEGG到GSEA和GSVA/ssGSEA(含基因ID转换)
mRNA-seq转录组二代测序从raw reads到表达矩阵:上中游分析pipeline
miRNA-seq小RNA高通量测序pipeline:从raw reads,鉴定已知miRNA-预测新miRNA,到表达矩阵【一】
miRNA-seq小RNA高通量测序pipeline:从raw reads,鉴定已知miRNA-预测新miRNA,到表达矩阵【二】
相信大家对ggplot2都不陌生。ggplot2包是R以可视化为专长的特征中不可或缺的一分子。生物医学数据的可视化一直都是数据阐释的重要部分,说咱们是业余视觉设计也不为过。鉴于ggplot2的简单明了和功能强大,目前很多articles中工整美观的figures均出自它之手。
一、ggplot2绘图的基本思想
使用ggplot2进行数据可视化是以图层为基本单位来进行的。绘制图片的时候使用系列函数进行层层累加,最后得到含有完整图片的对象。
p <- function1()+function2()+function3()+...
p
ggplot2中函数的大致类别
1. 基础函数:指定数据。
ggplot(data = , mapping = ): 一般使用本函数指定绘图的数据,接下来的绘图和调整函数均默认继承本函数中提供的数据。data要求数据框,mapping参数需配合aes()函数指定映射。
aes(): 将data中的对象传递给mapping参数,作为接下来所有绘图函数的输入数据。常见参数有:x, y, fill, color, size, alpha等,分别代表x轴数据,y轴数据,图形填充分组依据,和线/点上色分组依据等。
2. 绘图函数:绘图操作主体。
常用的有:
geom_density()、geom_violin()、geom_col()、geom_point()、geom_dotplot、geom_boxplot()、geom_smooth()等函数,分别用于绘制密度图、小提琴图、条形图、散点图/散点图、箱线图、回归拟合线等。
统一的参数有:
inherit.aes = T/F:是否继承ggplot函数中指定的数据。默认为T。
data, mapping:如果上面参数为F,则需通过这两个参数另外指定数据。当然也可以直接使用mapping=aes()补充ggplot函数中没有指定的全局参数,仅用于该函数使用(如ggplot函数只指定了x和y,绘制boxplot时设置geom_boxplot(aes(fill=...))进行分组填充上色。)
color:统一该函数绘图的点/线/边框颜色时直接使用。
size:函数绘制内容大小设置。
position:绘图内容的位置设置。
此外,每个具体的作图函数都有其单独的参数,具体可使用help(function)进行查询,常用的后续实例操作中也会使用讲解。
3. 注释函数
常用的有:
geom_errorbar()、geom_abline()、geom_vline()、geom_hline()、geom_segment()、geom_rect()、geom_tile()、geom_text()、annotate()等,分别用于图片中误差棒、对角线、竖直线、横线、自由线段、方块/方块、文字和小范围自由注释等。
注释函数的参数不一,但基本也可以分为 数据设定/坐标设定(如geom_abline的slope和intercept参数分别设定斜线的斜率和截距;geom_segment的x/xend/y/end分别设置线段的起始和结束的坐标位置) 和 样式调整(如geom_errorbar中width调整误差棒顶端横线宽度;注释线条的函数中linetype调整线条的类型;size调整样式大小)两大类。
4. 样式调整函数
最后可以对ggplot2作出的图形进行全方面参数的调整:
(1)坐标轴的调整:
xlim()、ylim()调整连续坐标轴可视化的范围。
xlab()、ylab()设置x、y轴的sub_titles。
scale_x_continuous()、scale_x_discrete()分别设置连续/离散 坐标的刻度breaks和labels(y轴同理)。
ggtitle()可以设置图片的标题。
(2)绘图对象颜色的调整:
scale_fill_manual()、scale_fill_gradient()、scale_fill_gradient2()等用于设置填充绘图对象的颜色:手动设置分组变量所对应的的颜色、和连续变量渐变的颜色。
scale_color_manual()、scale_color_gradient()、scale_color_gradient2()等用于线、点或边框的颜色。
(3)主题的调整:
已有一些ggplot2预设好的主题可以直接调用,如theme_bw(),theme_gray()等。
theme():该函数功能非常强大,可以对图片(panel)的背景、分割线、字体大小、x/y轴、图片的标题(与xlab、ylab、ggtitle功能重合)、图例(legend)的位置、breaks等进行设置。
(4)图例的调整:
除了theme()中对图例可进行许多调整外,scale_color_****()、scale_fill_****()、scale_size_****()、scale_alpha_****()等函数中的name、breaks、labels、limits等参数可以分别对各自主管的图例类型(如size只负责size的legend,color和fill分别负责点/线,和填充对象的legend)的标题名、图例刻度、刻度名、展示范围进行设置。
Optional:部分兼容ggplot2的补充包:
如beeswarm包,可绘制蜂群点图。
如ggsignif包和ggpubr包,可进行p值和显著性的注释。
...
第一个示例
一串较为典型的ggplot2作图代码大概就是这样的:
#generate the data frame to be graphed.
tutorial_df <- data.frame('values'=c(1,2,3,4),
'groups'=c('A','B','C','D'),
'colors'=c('color1','color1','color2','color2'),
'fills'=c('color3','color4','color3','color4'))
#tell ggplot2 how we'll order groups in the x-axis.
tutorial_df$groups <- factor(tutorial_df$groups, levels = c('D','C','B','A'), ordered = T)
#draw the plot.
p <- ggplot(tutorial_df, aes(x=groups, y=values, color=colors, fill=fills))+
geom_col(width = 0.5, size = 1, linetype = 1)+
scale_color_manual(values = c('color1'='navy', 'color2'='blue'))+
scale_fill_manual(values = c('color3'='red', 'color4'='yellow'))+
xlab('this is x-axis')+ylab('this is y-axis')+
ggtitle('tutorial picture')+
theme_gray()+
theme(panel.grid = element_line(color = 'purple'), plot.title = element_text(hjust = 0.5))
p
将代码用自然语言翻译一下:以tutorial_df数据框中的groups列作为x轴分组依据,values列作为y轴值,以colors列作为边框颜色依据,以fills作为填充颜色依据。然后绘制条形图,条宽度为0.5,边框size为1,边框线为实线。随后手动设置边框和填充颜色的种类,设置x轴、y轴小标题以及图片主题。最后在使用预设主题theme_gray的基础上,将背景分割线设为紫色,标题设置为居中。
得到的图片如下,嗯真的很辣眼睛(0_0),但是我想作为第一个示例应该能很清楚地展示每个函数和各个参数的作用。
an ugly tutorial demonstration of ggplot2注:
知识点来了:对ggplot2分组在坐标轴上的顺序进行调整时,需要将dataframe中的相应变量设置成因子型(factor),用levels参数进行排序,随后的可视化顺序就会【按照因子级别从小到大】顺序排列。
二、ggplot2在生物医学文献中的基础可视化示例
接下来一系列实例操作对于理解ggplot2的绘图思路及主要参数应用非常有效!
既然使用了TCGA数据库获得了一些基础的分析结果,那接下来我尝试模仿一些文献做一些基础的数据可视化工作。
获取数据:
基于第一篇文章从TCGA数据库下载并整合清洗高通量肿瘤表达谱-临床性状数据,我们下载并清洗TCGA数据库中white人种的LUSC肺鳞癌mRNA-seq转录组数据。
随后根据第二篇文章TCGA数据整合后进行DESeq2差异表达分析和基于R的多种可视化进行了基于DESeq2的差异分析。
在进行可视化实例前,我们假设已经获得并需要如下对象:
(1)mRNA_exprSet:FPKM expression matrix of genes from cancer/normal tissue.
(2)condition_table:a data frame containing sample type info and IDs of each sample.
(3)clinical_trait:a data frame recording tumor stage, gender and ID info of each sample.
(4)expr_vst:vst-transformed normalized counts matrix of qualified genes processed by DESeq2 which is suitable for data visualization.
可视化实例(点击蓝色字体进入新页面查看)
(1)测序结果概览:基因表达量rank瀑布图,高密度表达相关性散点图,注释特定基因及errorbar的表达相关性散点图绘制
(2)单/多个基因在组间同时展示的多种选择:分组小提琴图、分组/分面柱状图、单基因蜂群点图拼图的绘制
(4)主成分PCA分析:分析流程+散点及分组核心区域绘制
喜欢的朋友就点个赞吧!