基于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)单/多个基因在组间同时展示的多种选择:分组小提琴图、分组/分面柱状图、单基因蜂群点图拼图的绘制

(3)配对样本基因表达趋势:优化前后的散点连线图+拼图绘制

(4)主成分PCA分析:分析流程+散点及分组核心区域绘制

喜欢的朋友就点个赞吧!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,475评论 4 372
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,744评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,101评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,732评论 0 221
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,141评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,049评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,188评论 2 320
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,965评论 0 213
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,716评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,867评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,341评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,663评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,376评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,200评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,990评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,179评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,979评论 2 279

推荐阅读更多精彩内容