“对称散点图”的绘制(R语言)
R语言绘制基因表达基因的“对称散点图
转录组分析中,计算了两组间差异表达的基因后,通常怎样表示?您可能第一时间想到可以使用火山图。的确,火山图是使用频率最多的,在火山图中可以很轻松地根据基因在两组间的Fold Change值以及显著性p值,识别和判断差异表达基因概况。火山图实质上就是一种散点图,通常横纵坐标分别代表了log2转化后的Fold Change以及-log10转化后的p值或p调整值信息(下图左)。提到散点图,常见的还有另一种展示差异表达基因的样式:横纵坐标轴可分别代表两组基因表达均值,这种风格可以更方便直观对比基因在两组中的差异状态。
本篇教程就让我们来学习如何绘制右图这种“对称散点图”,展示组间差异基因表达格局。
1 示例文件
示例文件“gene_diff.txt”是一组基因差异表达分析结果,记录了处理组(treat)和对照组(control)间表达显著不一致的基因,鉴定标准为p<0.01以及|log2 Fold Change|≥1。
其中,gene_id为基因名称;control和treat代表了两组中基因的平均表达值;log2FoldChange即log2转化后的基因表达差异倍数;pvalue是差异基因显著性p值;diff为根据p<0.01以及|log2 Fold Change|≥1筛选的差异基因,该列中“up”为上调,“down”为下调,“none”为非差异基因。
接下来通过该示例文件,展示使用R语言绘制差异基因表达“对称散点图”过程。
2 数据预处理
首先对数据做一些预处理。
例如,基因表达值数量级相差过大,取个对数转换;基因名称按是否为差异基因作个排序,避免后续作图时被不显著的基因点遮盖,即排序的目的是让这些显著基因的点都位于图的上方。
#读取示例数据
express <- read.delim('gene_diff.txt', sep = '\t')
#将基因表达值取个log(1+)转换
express$control <- log(express$control+1)
express$treat <- log(express$treat+1)
#排序,目的是将显著的基因展示在前方图层,避免被不显著基因的点遮盖
express$diff <- factor(express$diff, levels = c('up', 'down', 'none'))
express <- express[order(express$diff, decreasing = TRUE), ]
head(express) #查看读取并预处理后的数据表格
3 绘制差异基因散点图,颜色表示差异基因
下来就可以使用预处理后的数据作图了。
第一种类型是将基因按上调、下调或不显著类型着色,便于从图中辨认差异基因。我们使用ggplot2的方法绘制差异基因散点图。
#绘制散点图,显著上、下调基因以不同颜色区分
library(ggplot2)
ggplot(express, aes(x = control, y = treat)) +
geom_point(aes(color = diff), size = 1) + #按上下调指定基因点的颜色
scale_color_manual(values = c('red', 'gray', 'green4'), limit = c('up', 'none', 'down')) + #上下调基因颜色赋值
theme_bw() + #背景调整
labs(x = 'control group', y = 'treat group', color = '') + #坐标轴标题设置
geom_abline(intercept = 1, slope = 1, col = 'black', linetype = 'dashed', size = 0.5) + #这3句用于添加 |log2FC|>1 的阈值线
geom_abline(intercept = -1, slope = 1, col = 'black', linetype = 'dashed', size = 0.5) +
geom_abline(intercept = 0, slope = 1, col = 'black', linetype = 'dashed', size = 0.5)
两个坐标轴分别代表了处理组(treat)和对照组(control),图中的点代表各基因在两组中的平均表达值(已经作了log转换)。treat组和control组相比,上调基因以红色表示,下调基因以绿色表示。图中的虚线代表了|log2FC|=1时的阈值线。
在该图中,我们可以很轻松地观察差异基因整体分布状态和数量比较的信息。
4 绘制差异基因散点图,颜色表示p值
上图中没有将p值信息展示出。因此另一种思路是,颜色代表p值,这样就可以在图中获得一个渐变梯度。同样使用ggplot2的方法绘制,和上述过程相比仅在颜色指定上存在区别。
#按 p 值数值的渐变色散点图
ggplot(express, aes(x = control, y = treat)) +
geom_point(aes(color = pvalue), size = 0.8) + #按 p 值大小指定基因点的颜色
scale_color_gradient2(low = 'red', mid = 'darkgoldenrod2', high = 'royalblue2', midpoint = 0.5) + #渐变色颜色指定
theme_bw() + #背景调整
labs(x = 'control group', y = 'treat group', color = 'p-value') + #坐标轴标题设置
geom_abline(intercept = 1, slope = 1, col = 'black', linetype = 'dashed', size = 0.5) + #这3句用于添加 |log2FC|>1 的阈值线
geom_abline(intercept = -1, slope = 1, col = 'black', linetype = 'dashed', size = 0.5) +
geom_abline(intercept = 0, slope = 1, col = 'black', linetype = 'dashed', size = 0.5)
类似上图,两个坐标轴分别代表了处理组(treat)和对照组(control),图中的点代表各基因在两组中的平均表达值(已经作了log转换),图中的虚线代表了|log2FC|=1时的阈值线。
和上图不同点在于,此时基因按显著性p值着色,从不显著>显著展示以蓝色>红色渐变,就获得了一种梯度信息。这样可以很方便地看出,在两组中的表达值差异越大的基因,p值越小,二者趋势是一致的,重在描述了差异倍数和p值的关系。