R 学习 - 散点图

R 学习 - 散点图

生信宝典公众号:http://mp.weixin.qq.com/s/c2nwATMwyU_9FgLprqmQ5A

散点图

散点图在生物信息分析中是应用比较广的一个图,常见的差异基因火山图、功能富集分析泡泡图、相关性分析散点图、抖动图、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是真正作图

# 前面有人说,上面都输完了,怎么没出图

# 就因为差了一个pp

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

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

# 从示例数据中看到,最小的padj值为0,求取负对数为正无穷。

# 实际上padj值小到一个点对我们来讲就是个数

# 所以可以给所有小于1e-6的padj都让其等于1e-6,再小也没意义

#volcanoData[volcanoData$padj<1e-6,"padj"]<-1e-6volcanoData$padj<-(-1)*log10(volcanoData$padj)

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

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

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

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

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

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

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

输入数据格式如下

这个数据是前面讲到的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

六个点少了只剩下了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

一网打进散点图绘制

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

Samp Gene1 Gene2 Color Size GC_quality Base_quality

a 1 1 grp1 10 PASS PASS

b 2 2 grp1 10 PASS PASS

c 1 3 grp1 10 WARN PASS

d 3 1 grp2 15 WARN WARN

e 2 2 grp2 15 PASS WARN

f 3 3 grp3 5 PASS PASS

g 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

如果横纵轴为字符串,且有重复, 则需指定参数-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

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

转发获取,不用再重复了

Reference

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

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

推荐阅读更多精彩内容