主讲老师第 十一 课:ggpubr 包绘图
接下来,我们再另外介绍两个 R 包,分别是 ggplot2 的增强版 R 包,ggpubr 包和ggstatsplot 包。
尽管 ggplot2 包可以在 R 中进行优雅的数据可视化,但是其默认生成的绘图需要进行一些格式化才能用于文章发表,此外,要自定义 ggplot()函数自成一套体系,对于绘图而言,语法的学习对没有高级 R 编程技能的大家增加了不少的难度。鉴于此,在 ggplot2 包的基础上,ggpubr 包(ggpubr.zip)提供了一些易于使用的功能,可以快速绘制用于发表使用的图形。下面,我将给大家介绍如何使用 ggpubr 包绘制几种常见的图形
1.R 包和数据准备
1.1 R 包的安装与读取
首先自然是 R 包的读取,最初,作者将 ggpubr 包发表在 Github 网站上,并提供了其基本的使用方法。如果有兴趣的话,大家也可以前去下载这部分说明文件进行阅读,网址:https://github.com/kassambara/ggpubr目前,我们可以直接从 CRAN 网站上获得 ggpubr 包的安装信息,因此,关于 ggpubr包的安装,同样存在两种安装方法。
安装方法一:从 Github 网站上进行安装
安装方法二:使用 install.packages()命令直接从 CRAN 上获取安装方式安装成功后,将 ggpubr 包读取进来
1.2 数据准备
由于前一讲中 ggplot2 包的讲解主要基于其内置数据,因此在 ggpubr 包的演示过程中,我们就使用该文章中的 BTK 基因的表达和免疫 ESTIMATE 评分进行展示。关于这部分数据的获取,我已经放在文件夹里,直接读取使用就可以了。至于如何获得的,明天就会进行讲解数据下载和整理。
在读取了 TCGA-LUAD 患者的 mRNA 表达数据后,根据目标基因的信息,通过 expr[target.gene,]按行进行筛选,并进行对数转换。
expr[target.gene,]取子集,log2(expr[target.gene,] + 1)对数转换,t(log2(expr[target.gene,] + 1))转置,变成了矩阵,as.data.frame(t(log2(expr[target.gene,] + 1)))矩阵变数据框。
这样,目标基因的表达数据就整理好了。随后,加载免疫 ESTIMATE 评分数据。
由于整理后的表达数据和评分数据的行名是一致的,使用 cbind()函数将两个数据框进行合并。
到此,基本的数据格式已经整理完成了。
到此,基本的数据格式已经整理完成了。接着,我们将新增一列 group,根据 BTK 表达的中位值,将患者分成 high 和 low 两组。在这里,使用的是 ifelse()判断语句。
最终,得到 BTK high 的患者共 252 个,BTK low 的患者 249 个。
同时,检查一下 exp 数据集中每个变量的数据格式。
端详一下整理好的数据,作图即将开始。
2.常见基本图形的绘制
2.1 分布图绘制(Distribution)
首先,我们先来绘制一个简单的图形,展示一下 ImmuneScore 在 BTK 不同表达分组中的分布情况。
密度图展示不同 BTK 表达分组下 ImmuneScore 的分布。X 轴为 ImmuneScore ,Y 轴为自动累计的密度,通过参数 rug = TRUE 对 X 轴上添加地毯线进一步呈现样本的分布。按 BTK高和低表达分组,分别标记轮廓线颜色和填充色,以展示各组的分布。此外,在绘图代码中,可以发现,与 ggplot2 包的语法规则相比,其发生了很明显的简化,更加简单易懂,且便于大家在后期自己调整参数使用,而且,将 ggdensity()函数替换成 gghistogram()函数,可以 快速地将密度图转换成直方图,而且在配色方面也十分的优美
2.2 箱线图绘制(barplot)
下面,来教一下大家如何绘制生信文章中最常使用的箱线图。在 ggpubr 包,我们可以通过ggboxplot() 函数来绘制箱线图。不管是密度图,直方图,还是箱线图,我们都可以通过函数的名字初步得到判断,如 density,histogram,boxplot。
与前面几个图不同的是,我们在每个分组增加了相应的点,这是通过 add = "jitter" 命令来实现增加抖动的点。绘制到此,距离发表是不是还感觉缺少了些什么内容呢?没错,就是统计分析结果。下面,我们来看下如何增加统计分析到图中,首先,将需要进行比较的组别进行设置。
接着,我们需要借助 stat_compare_means()函数的帮助,设置统计方法为 wilcox.test ,并将统计结果的 P 值转换成为星号(*)。
接下来,试着绘制一下如何将箱线图改变成为带统计标记的小提琴图(violin),直接将ggboxplot()函数变成 ggviolin()函数名称即可,接着就是里面个别参数的一些小小微调而已这样,一幅精美的小提琴图就绘制完成了。而且小提琴中间还有箱线,无疑可以给你的文章结果增加不少光彩。
2.3 条形图
最后,我们来讲解一下如何绘制条形图。首先我们另外准备一些数据,由于病人较多,直接绘制条形图会显得比较拥挤,我对数据进行了一些微调,筛选了 exp 数据集中 low 和high 分组对前 5 个患者生成一个新数据集。
filter(group == "low")筛选分组为 low 的行,head(5)取前 5 个,rbind(x1,x2)通过 rbind()函数合并,对于这个操作过程,后面还会有用到的,特别是在火山图的绘制过程中,这样,一个新的数据集就生成了。
接着,开始条形图,顾名思义就是 barplot,那么我们使用的就是 ggbarplot() 函数这里通过 npg 使用 nature 杂志的配色同时,将其按照降序进行排列,如果,你想按组排列的话,修改一下 sort.by.groups 参数即可。
2.4 偏差图/棒棒糖图(Lollipop Chart)
在用惯了条形图的时候,有没有考虑过换一种展示形式呢?首先为了便于作图,将ImmuneScore 值进行类似 z-score 的标准化转换。
将 ImmuneScore 值减去平均值,再除以其标准差 SD 值,这是一种标准化的方式。
通过参数 sort.val = "asc" 对 ImmuneScore_z 值按升序进行排列,得到最终的偏差图。
下面,开始对图形进行微调。首先,回忆一下,不知道还记得在 ggplot2 中, coord_flip() 函数的使用方法和作用吗?坐标轴转置。在 ggpubr 包中,同样有相似功能的参数存在供大家使用。
当觉得得到的图形太长时,可以通过参数 rotate = TRUE 的设置,将整个坐标轴进行反转。
当然,如果你不喜欢这一根根冷淡的柱子,我们可以将图形换成传说中的棒棒糖图。简单介绍,该图由两种元素组成,分别是一根棒加一个圆圈-------尽管如此,但其往往能够反映多维度的数据信息。
这样一个简单的棒棒糖图就出现了。
其中,圆的大小分别代表 ImmuneScore_z 的大小,而其颜色则代表不同的分组信息,青菜萝卜各有所好。当然,ggpubr 的强大绝不止于此,大家先熟悉这几个函数,其他的也自然能快速往外延伸学习。棒棒糖图,Lollipop Chart,发文章的时候别把名字给写错了