百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 博客教程 > 正文

R语言学习 - 散点图绘制 如何用r语言绘制散点图矩阵

connygpt 2024-10-16 08:45 9 浏览

散点图

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

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

对数据坐下预处理,差异大的基因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

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

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

相关推荐

自学Python,写一个挨打的游戏代码来初识While循环

自学Python的第11天。旋转~跳跃~,我~闭着眼!学完循环,沐浴着while的光芒,闲来无事和同事一起扯皮,我说:“编程语言好神奇,一个小小的循环,竟然在生活中也可以找到原理和例子”,同事也...

常用的 Python 工具与资源,你知道几个?

最近几年你会发现,越来越多的人开始学习Python,工欲善其事必先利其器,今天纬软小编就跟大家分享一些常用的Python工具与资源,记得收藏哦!不然下次就找不到我了。1、PycharmPychar...

一张思维导图概括Python的基本语法, 一周的学习成果都在里面了

一周总结不知不觉已经自学Python一周的时间了,这一周,从认识Python到安装Python,再到基本语法和基本数据类型,对于小白的我来说无比艰辛的,充满坎坷。最主要的是每天学习时间有限。只...

三日速成python?打工人,小心钱包,别当韭菜

随着人工智能的热度越来越高,许多非计算机专业的同学们也都纷纷投入到学习编程的道路上来。而Python,作为一种相对比较容易上手的语言,也越来越受欢迎。网络上各类网课层出不穷,各式广告令人眼花缭乱。某些...

Python自动化软件测试怎么学?路线和方法都在这里了

Python自动化测试是指使用Python编程语言和相关工具,对软件系统进行自动化测试的过程。学习Python自动化测试需要掌握以下技术:Python编程语言:学习Python自动化测试需要先掌握Py...

Python从放弃到入门:公众号历史文章爬取为例谈快速学习技能

这篇文章不谈江流所专研的营销与运营,而聊一聊技能学习之路,聊一聊Python这门最简单的编程语言该如何学习,我完成的第一个Python项目,将任意公众号的所有历史文章导出成PDF电子书。或许我这个Py...

【黑客必会】python学习计划

阅读Python文档从Python官方网站上下载并阅读Python最新版本的文档(中文版),这是学习Python的最好方式。对于每个新概念和想法,请尝试运行一些代码片段,并检查生成的输出。这将帮助您更...

公布了!2025CDA考试安排

CDA数据分析师报考流程数据分析师是指在不同行业中专门从事行业数据搜集、整理、分析依据数据作出行业研究评估的专业人员CDA证书分为1-3级,中英文双证就业面广,含金量高!!?报考条件:满18...

一文搞懂全排列、组合、子集问题(经典回溯递归)

原创公众号:【bigsai】头条号:程序员bigsai前言Hello,大家好,我是bigsai,longtimenosee!在刷题和面试过程中,我们经常遇到一些排列组合类的问题,而全排列、组合...

「西法带你学算法」一次搞定前缀和

我花了几天时间,从力扣中精选了五道相同思想的题目,来帮助大家解套,如果觉得文章对你有用,记得点赞分享,让我看到你的认可,有动力继续做下去。467.环绕字符串中唯一的子字符串[1](中等)795.区...

平均数的5种方法,你用过几种方法?

平均数,看似很简单的东西,其实里面包含着很多学问。今天,分享5种经常会用到的平均数方法。1.算术平均法用到最多的莫过于算术平均法,考试平均分、平均工资等等,都是用到这个。=AVERAGE(B2:B11...

【干货收藏】如何最简单、通俗地理解决策树分类算法?

决策树(Decisiontree)是基于已知各种情况(特征取值)的基础上,通过构建树型决策结构来进行分析的一种方式,是常用的有监督的分类算法。决策树算法是机器学习中的一种经典算法,它通过一系列的规则...

面试必备:回溯算法详解

我们刷leetcode的时候,经常会遇到回溯算法类型题目。回溯算法是五大基本算法之一,一般大厂也喜欢问。今天跟大家一起来学习回溯算法的套路,文章如果有不正确的地方,欢迎大家指出哈,感谢感谢~什么是回溯...

「机器学习」决策树——ID3、C4.5、CART(非常详细)

决策树是一个非常常见并且优秀的机器学习算法,它易于理解、可解释性强,其可作为分类算法,也可用于回归模型。本文将分三篇介绍决策树,第一篇介绍基本树(包括ID3、C4.5、CART),第二篇介绍Ran...

大话AI算法: 决策树

所谓的决策树算法,通俗的说就是建立一个树形的结构,通过这个结构去一层一层的筛选判断问题是否好坏的算法。比如判断一个西瓜是否好瓜,有20条西瓜的样本提供给你,让你根据这20条(通过机器学习)建立起...