R语言学习 - 散点图绘制

生信宝典

共 1356字,需浏览 3分钟

 · 2020-05-31

散点图

散点图在生物信息分析中是应用比较广的一个图,常见的差异基因火山图功能富集分析泡泡图、相关性分析散点图、抖动图PCA样品分类图(后续推出)等。凡是想展示分布状态的都可以用散点图。

横纵轴都为数字的散点图解析

绘制散点图的输入一般都是规规矩矩的矩阵,可以让不同的列分别代表X轴、Y轴、点的大小、颜色、形状、名称等。

输入数据格式 (使用火山图的输入数据为例)

火山图需要的数据格式如下

  • id: 不是必须的,但一般的软件输出结果中都会包含,表示基因名字。

  • log2FoldChange: 差异倍数的对数,一般的差异分析输出结果中也会给出对数处理的值, 因此程序没有提供这一步的计算操作。

  • padj: 多重假设检验矫正过的差异显著性P值;一般的差异分析输出结果为原始值,程序提供一个参数对其求取负对数。

  • significant: 可选列,标记哪些基因是上调、下调、无差异;若无此列或未在参数中指定此列,默认程序会根据padj列和log2FoldChange列根据给定的阈值自动计算差异基因,并作出不同颜色的标记。

  • label :可选列,一般用于在图中标记出感兴趣的基因的名字。非-行的字符串都会标记在图上。

volcano = "id;log2FoldChange;padj;significant;label
E00007;4.28238;0;EHBIO_UP;A
E00008;-1.1036;0.476466843393901;Unchanged;-
E00009;-0.274368;1;Unchanged;-
E00010;4.62347;7.37606076333335e-103;EHBIO_UP;-
E00012;0.973987;0.482982440163204;Unchanged;-
E00017;-1.30205;0.000555693857439792;Baodian_UP;B
E00024;0.617636;2.78047837287061e-13;Unchanged;-
E00033;1.48669;2.56000581595275e-60;EHBIO_UP;-
E00034;-0.783716;0.00341521725291801;Unchanged;-
E00036;2.01592;6.03136656016401e-06;EHBIO_UP;C
E00040;-1.89657;4.73663890849056e-21;Baodian_UP;-
E00041;-0.268168;0.563429434558031;Unchanged;-
E00042;0.0861048;0.367700939634328;Unchanged;-
E00043;-1.19328;1.42673872027352e-153;Baodian_UP;-
E00044;-0.887981;2.43067804654905e-26;Unchanged;-
E00047;-0.610941;5.51696648645932e-57;Unchanged;-"


# 数据的读取之前的R语言统计和绘图系列都已解释过,不再赘述
# 文末也有链接可直达之前的文章,新学者建议从头开始
volcanoData <- read.table(text=volcano, sep=";", header=T, quote="", check.names=F)
head(volcanoData)
      id log2FoldChange          padj significant label
1 E00007       4.282380  0.000000e+00    EHBIO_UP     A
2 E00008      -1.103600  4.764668e-01   Unchanged     -
3 E00009      -0.274368  1.000000e+00   Unchanged     -
4 E00010       4.623470 7.376061e-103    EHBIO_UP     -
5 E00012       0.973987  4.829824e-01   Unchanged     -
6 E00017      -1.302050  5.556939e-04  Baodian_UP     B

绘制散点图,只需要指定X轴和Y轴,再加上geom_point即可。

library(ggplot2)
p <- ggplot(volcanoData, aes(x=log2FoldChange, y=padj))
p <- p + geom_point()
# 前面是给p不断添加图层的过程
# 单输入一个p是真正作图
# 前面有人说,上面都输完了,怎么没出图
# 就因为差了一个p
p

说好的火山图的例子,但怎么也看不出喷发的态势。

ad3cf923fdd8043c07a494c4795dd88c.webp

对数据坐下预处理,差异大的基因padj小,先对其求取负对数,所谓负负得正,差异大的基因就会处于图的上方了。

# 从示例数据中看到,最小的padj值为0,求取负对数为正无穷。
# 实际上padj值小到一个点对我们来讲就是个数
# 所以可以给所有小于1e-6的padj都让其等于1e-6,再小也没意义
#
volcanoData[volcanoData$padj<1e-6, "padj"] <- 1e-6
volcanoData$padj <- (-1)* log10(volcanoData$padj)

数据中基因的上调倍数远高于下调倍数,使得出来的图是偏的,这次画图时调整下X轴的区间使图对称。

p <- ggplot(volcanoData,  aes(x=log2FoldChange,  y=padj)) +
    geom_point() +
    xlim(-4.7, 4.7)
p

eebe100faad5fa2bb9cb883c69843681.webp

有点意思了,数据太少不明显,下一步加上颜色看看。

p <- ggplot(volcanoData,  aes(x=log2FoldChange,  y=padj)) +
    geom_point(color=significant) +
    xlim(-4.7, 4.7)
p

利用现有的数据,基本上就是这个样子了。虽然还不太像,原理都已经都点到了。

703b7448ce85f9e910477a33f931ecaa.webp

Volcano plot | 别再问我这为什么是火山图

盗取火山图绘制一文中的图来显示个真正的火山图吧。这样一步步绘制很麻烦,去看一步法吧

990481f9d7de8e682a40db322768f718.webp

横纵轴都为字符串的散点图展示

输入数据格式如下

这个数据是以前讲到的FASTQC结果总结中的直观的查看所有样品测序碱基质量和GC含量的散点图的示例数据

fastqc<-"ID;GC_quality;Base_quality
ehbio_1_1;PASS;PASS
ehbio_1_2;PASS;PASS
ehbio_2_1;WARN;PASS
ehbio_2_2;WARN;PASS
Other_1_1;FAIL;FAIL
Other_1_2;FAIL;FAIL"


fastqc_data <- read.table(text=fastqc, sep=";", header=T)
# 就不查看了
p <- ggplot(fastqc_data, aes(x=GC_quality, y=Base_quality)) + geom_point()
p

677faf8e945161ecc04cc66235912bce.webp

六个点少了只剩下了3个,重叠在一起了,而且也不知道哪个点代表什么样品。这时需要把点抖动下,用到一个包ggbeeswarm,抖动图的神器。

library(ggbeeswarm)
p <- ggplot(fastqc_data, aes(x=GC_quality, y=Base_quality)) + geom_quasirandom()
# 使用geom_text增加点的标记
# label表示标记哪一列的数值
# position_quasirandom获取点偏移后的位置
# xjust调整对齐方式; hjust是水平的对齐方式,0为左,1为右,0.5居中,0-1之间可以取任意值。vjust是垂直对齐方式,0底对齐,1为顶对齐,0.5居中,0-1之间可以取任意值。
# check_overlap检查名字在图上是否重叠
p <- p + geom_text(aes(label=ID), position=position_quasirandom(),hjust=0, check_overlap=T)
p

cf26c1772a258285e66ef755d528d0d9.webp

一网打进散点图绘制

假如有一个输入数据如下所示(存储于文件scatterplot.xls中)

Samp    Gene1    Gene2    Color    Size    GC_quality    Base_qualitya    1    1    grp1    10    PASS    PASSb    2    2    grp1    10    PASS    PASSc    1    3    grp1    10    WARN    PASSd    3    1    grp2    15    WARN    WARNe    2    2    grp2    15    PASS    WARNf    3    3    grp3    5    PASS    PASSg    2    1    grp3    5    WARN    PASS

想绘制样品在这两个Gene为轴的空间的分布,并标记样品的属性,只需要运行如下命令

# -f: 指定输入文件,列数不限,顺序不限; 第一行为列名字,第一列无特殊要求,必选
# -X: 指定哪一列为X轴信息,必选
# -Y: 指定哪一列为Y轴信息,必选
# -c: 指定用哪一列标记颜色,可选
# -s: 指定哪一列标记大小,一般为数字列,可选
# -S: 指定哪一列标记形状,可选
# -L: 指定哪一列用来作为文本标记
# -w, -u: 指定图的长宽
sp_scatterplot2.sh -f scatterplot.xls -X Gene1 -Y Gene2 -c Color -s Size -S GC_quality -L Samp -w 10 -u 10

6c630cdece6dba9ecf7298ef253c1d5d.webp

如果横纵轴为字符串,且有重复, 则需指定参数-J TRUE以错开重叠的点,具体如下

# -O: 指定X轴变量的顺序, 默认是字母顺序
# 其它列或其它属性的顺序也可以用相应的方式指示,具体看程序的帮助提示
# -c Gene1: 用特定基因的表达对点着色,单细胞分析图中常用
# -J TRUE: 见上
# -Z FALSE:默认使用geom_text_repel添加点的标记,及其智能,不会出现标签过多覆盖的情况
# 但对jitterplot,会有些冲突,所以在`-J TRUE`且出来的图中点的标签不符合预期时,设定
# 次参数为FALSE,使用geom_text标记点。

sp_scatterplot2.sh -f scatterplot.xls -X GC_quality -Y Base_quality -O "'WARN', 'PASS'" -c Gene1 -w 10 -u 10 -J TRUE -L Samp -Z FALSE

9e3814b889750ac3fea84e9585870a41.webp只有想不到,没有做不到,sp_scatterplot2.sh还可以完成更多你想做的散点图,而且只需调参数,无需改代码,简单可重用。

 转发朋友圈截图给客服(shengxinbaodian)获取,不用再重复了

Reference

  • http://blog.genesino.com/2017/07/scatterPlot

你可能还想看:

高颜值免费在线绘图(点击图片直达网站手册)

往期精品(点击图片直达文字对应教程)

829f7e71757bd0b633fbf164c4a89430.webp

8e53163ab8d6d590bcfdfba9387cfa5d.webp

f3409c638c59387c13c10a212fdc1d16.webp

12ea7991d18cad859930f0db0316c362.webp

a26b31827fddceb6ea9766374ffbf00f.webp

d09a92f5314f200cbc823fe95aff40a5.webp

9dfed70d9c5531bea26c0b01f467a324.webp

bee54286a866df13ef9f30d469c7e002.webp

e402f05b138979b74142982c58c49adf.webp

b92d1c9d7667e372ca15a1ddd3b53fba.webp

8229dd54be41de10ec038a8829e0ddb5.webp

825072b4f8f800c75433b004034c8e2d.webp

ef3e2dd58e1d1bd03cb838f908ead683.webp

8e60ffec46f01b4aed98b877ee383499.webp

cfdfc6b94c710fe9c9e923a3cd3c9105.webp

fdc5aaca266d35ef407ae4256b7a6479.webp

7352dd9fef084bd215784f300e70ae87.webp

185cb1e9dcc367f7f9e28cbfa1148fc5.webp

e88691864acd1999b4c03590e890cbd0.webp

b7b997bc92e986ad0b3f528d3ed2c35b.webp

4e0d575fabbd76a56457db9d010543c3.webp

714e75de8aceb806ed3fc74694710285.webp

32a4f4b4fa330fd7bbeb95164a8809ae.webp

f21395ab70d42d3057a5b34a86e15e88.webp

8a0af0d63589e5e62b68c26e5a247e57.webp

cbf8982cae0b200ab1688fd83190cebe.webp

51b84f97efa72ac29ac1783706f0b3f0.webp

636768e2cece0f07642f43562f79bb25.webp


后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集

00e95aaa92f4fcfdd4d7727fc2504e5d.webp


浏览 102
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报