Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何通过Google来使用ggplot2可视化

如何通过Google来使用ggplot2可视化

作者头像
生信技能树
发布于 2018-03-08 02:46:39
发布于 2018-03-08 02:46:39
2K00
代码可运行
举报
文章被收录于专栏:生信技能树生信技能树
运行总次数:0
代码可运行

今天是大年初二,这篇文章我只想传达一点:

没有什么菜鸟级别的生物信息学数据处理是不能通过Google得到解决方案的,如果有,请换个关键词继续Google!

第一部分

首先用两分钟的时间简单介绍一下R语言

因为这个语言是肉丝儿Ross Ihaka)和萝卜特Robert Gentleman)两个人1992年在S语言的基础上发明出来的开源语言,所以叫做R语言。这两个人是统计学教授出身,所以R语言在统计学方面有着纯正的血统!如果你平时的工作和统计相关,你好意思不会点R语言么?

另外,在R语言的官网上,有这样一句话

One of R’s strengths is the ease with which well-designed publication-quality plots can be produced, including mathematical symbols and formulae where needed.

看明白了么盆友!

画图,画各种各样的图,画各种各样高逼格的图,画各种各样高逼格可以出版的图,是R语言自带的另一个光芒属性。如果你正在为如何画出各种好看的可视化图而苦恼,难道你不应该学习一点R语言么?

对了,如果你以为R语言的创造者肉丝儿萝卜特是一对情侣(这里真的没有鱼香什么事),那你错了,因为他俩长这样!

第二部分

谈到画图,R语言里面有一个极其强大的工具,它是我们今天要谈论的主角:ggplot2

ggplot2 绘图作为R语言可视化阵营扛把子的地位是毋庸置疑的,我能与它结缘主要是因为自己本来没有正经地学过R语言,基础绘图里面多如繁星的参数调的我晕头转向。

正好看到一些公司的科研结题报告里面非常赞的图都是ggplot2出品的,就下定决心学一下。老规矩,先看点中文资料,接触最早是Y叔的ggplot系列,作为初学者入门指引绰绰有余了。把代码在R里面原样输出看看效果,把数据和代码和图形在脑海中形成连接,最后留在我心底的就只有映射这一核心思想。

我就明白我已经学会ggplot2的可视化了,虽然那时候的我画一个完整完美的图仍旧是各种磕磕碰碰,但并不影响我已经掌握了它的精髓。

两年多过去了,本身工作中需要我亲自来画图的机会非常少,所以我的可视化能力毫无进展,甚至有小幅度后退。最近在做直播我的基因组系列,完全是一个人要把一个团队的分析要点全部hold住,对我本身也是一个不小的考验。

前面的科研常规流程,包括下载各种公共数据,下载安装常见的软件,跑流程是我习以为常的事情。但作为自己的基因组,我的探索肯定不能像以往做科研项目那样浅尝辄止,马马虎虎的交差(希望老板不要看到)。我开始一步步地探索以前未接触的,懒得接触的,错过的细节知识点。而展现知识点给读者最重要的环节就是可视化

今时不同往日,我木有手下,得亲自上阵。

  • 一篇一篇文献地读
  • 一个细节一个细节地搜索
  • 一行代码一行代码地敲
  • 一个参数一个参数地调整
  • 一个问题一个问题地求助。

大家由最近的直播我的基因组45—55讲应该可以看得出来,可视化方面我的确很弱,但我还是想分享一下自己是如何通过google来使用ggplot做可视化的!(如果你ggplot已经小成请略过后面的内容,新年快乐.jpg)

下面的每张图我都是通过搜索做出来的,因为此时的我ggplot2语法已经忘光了。(请务必亲自把我给出的关键词输入到google自己搜索一遍,我给出的链接复制到浏览器用心看一遍,不要以为就只有看个手机版的就能学会我的学习方法)http://mp.weixin.qq.com/s?__biz=MzAxMDkxODM1Ng==&mid=2247483932&idx=1&sn=e3797fb546bc699f0d149c34edb2677e&chksm=9b4842a7ac3fcbb1c3f2c6ebf2829e2d3e73b2aa19f70d98350c0d4ed724036d60c8f6c9c887&scene=21#wechat_redirect

比如画X,Y变量(测序深度和GC含量)的散点图需要添加回归曲线,标记回归方程。

【直播】我的基因组47:测序深度和GC含量的关系

我在Google里面是这样搜索的:

add regression line to scatter plot in rggplot2

http://www.cookbook-r.com/Graphs/Scatterplots_(ggplot2)/

http://stackoverflow.com/questions/7549694/ggplot2-adding-regression-line-equation-and-r2-on-graph

然后我只看了这两个链接而已,就得到了自己想要的图!

比如画多个分组变量(SNV和INDEL的het,hom)的条形图,并且标记每个变量的数值,还有修改图例,重新排序!

【直播】我的基因组54:把我的variation跟dbSNP数据库相比较

change legend in r ggplot2

http://www.cookbook-r.com/Graphs/Legends_(ggplot2)/

http://stackoverflow.com/questions/14622421/how-to-change-legend-title-in-ggplot-density

add values for bar plot in R ggplot

http://stackoverflow.com/questions/6644997/showing-data-values-on-stacked-bar-chart-in-ggplot2

http://stackoverflow.com/questions/11653268/adding-labels-to-ggplot-bar-chart

再比如画人的22+X+Y染色体的测序深度的分布!

链接【直播】我的基因组51:画全基因范围内的染色体reads覆盖度图

chromosome coverage r ggplot2

http://stackoverflow.com/questions/14629607/long-vector-plot-coverage-plot-in-r

https://www.biostars.org/p/18954/

还有GO的分类富集分析结果图,或者火山图,或者其它:

go structure enrichment results r ggplot2

https://cran.r-project.org/web/packages/GOplot/vignettes/GOplot_vignette.html

https://arxiv.org/ftp/arxiv/papers/1602/1602.07103.pdf

基本上生物信息学所有常见的图在Google里面都可以找到现成的代码!

如果你跟我一样,只是想达到目的,那就Google好了。如果你需要创造新的可视化,彻底走向可视化这条路就有点麻烦了,你可能需要看大量的书籍,比如上面我们Google结果经常出现的《cookbook R》《ggplot2 elegant graphics for data analysis》就是很优秀的。

不过,如果你们点进去看了我画的都是些什么东西,就明白,不要学我! 我只会修改别人的代码画图而已,如果你要彻底掌握可视化,请移步去Y叔的博客

GitHub 网址 http://guangchuangyu.github.io/

第三部分

这一部分是我和本文编辑学习ggplot2 的一小部分总结,如果你想看全部总结可以加生信菜鸟团QQ群下载 Word 版本

什么,群号是啥?文末告诉你,先好好看文章。

  • 关于R绘图的基本知识:

R语言目前比较常用的有三大绘图系统

  • 基本绘图系统(Base Plotting System)
  • Lattice绘图系统(Lattice Plotting System)
  • ggplot2绘图系统(ggplot2 Plotting System)

其中,基本绘图系统调用绘图函数graphics包,其中包括 plot/hist/lines/text等命令,每次你调用一个函数都会启用一个图形设备并在该设备上直接绘图。 而Lattice绘图系统相对高级一些,它会调用lattice包,其中包括 xyplot/histogram/stripplot/dotplot等命令,如果你使用 panel函数,还可以控制每个面板内的绘图。 最高级的当属ggplot2。 在ggplot2中,你首先利用 qplot()完成类似于基本绘图系统中 plot的操作,参数包括 geom/asethetics等;随后你可以利用 ggplot()这个核心实现 qplot()所无法实现得功能,它开创性的在R语言绘图中增加了图层的概念(如果你熟悉PS应该对图层不陌生)。

  • 关于ggplot2,下面的内容很重要!

首先必须练习几个基本图形来了解它映射的思想。

散点图、直方图、条形图、密度图、箱线图。

然后加载包及数据集,选取一个小量数据集来做分析,测试数据如下:

各种属性映射由 ggplot()函数执行,只需要加一个图层,比如 geom_point()告诉ggplot2要画散点,于是所有的属性都映射到散点上。

geom_point()完成的就是几何对象的映射,ggplot2提供了各种几何对象映射,如 geom_histogram用于直方图, geom_bar用于画柱状图, geom_boxplot用于画箱式图等等。

不同的几何对象,要求的属性会有些不同,这些属性也可以在几何对象映射时提供。(属性就是需要google的,除非你全部熟记它们!)

  • 内置图形函数

1.散点图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(data = small, mapping = aes(x =carat, y = price, shape=cut, colour=color))+geom_point()`

或者是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(small) +geom_point(aes(x=carat, y=price, shape=cut,colour=color))

aes里面的就是映射,根据 cut的不同选取不同形状的点,根据 color来画不同颜色的点,可以在 ggplot里面映射,也可以在几何对象里面映射

2.直方图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(small)+geom_histogram(aes(x=price,fill=cut), position="fill")

直方图只需要一个数据,自动分组来得到X,Y轴变量,直方图把连续型的数据按照一个个等长的分区(bin)来切分,然后计数,画柱状图

3.条形图

以上两个等价(这里缺图,我懒得上传了)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot()+geom_bar(aes(x=c(LETTERS[1:3]),y=1:3),stat="identity")

条形图只有自定义Y轴,然后用 stat="identity"才是真正意义上的条形图。

4.密度函数图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(small)+geom_density(aes(x=price,colour=cut))ggplot(small)+geom_density(aes(x=price,fill=clarity))

密度函数图,数据和映射和直方图是一样的,唯一不同的是几何对象, geom_histogram告诉 ggplot要画直方图,而 geom_density则说我们要画密度函数图,也是同样的把连续型的数据按照一个个等长的分区(bin)来切分,然后计数,画曲线。

5.箱式图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(small)+geom_boxplot(aes(x=cut,y=price,fill=color))

总共有5种 cut,每个 cut下面都有7种 color,所以会形成35个箱子! 上传图片太麻烦了,大过年的我就不浪费时间了。上面的代码大家拿到R里面直接复制粘贴就可以直接运行出图的!

如果ggplot2只是有这39个内置图形函数那就太没意思了,每个映射都是可以细化调整的,包括X,Y轴,颜色,大小等具体的熟悉,只是需要时间来熟练使用!

  • 统计变换(Statistics)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(small, aes(x=carat,y=price))+geom_point()+scale_y_log10()+stat_smooth()

这里, aes所提供的参数,就通过 ggplot提供,而不是提供给 geom_point,因为 ggplot里的参数,相当于全局变量, geom_point()stat_smooth()都知道x,y的映射,如果只提供给 geom_point(),则相当于是局部变量, geom_point知道这种映射,而 stat_smooth不知道,当然你再给 stat_smooth也提供x,y的映射,不过共用的映射,还是提供给 ggplot好。

统计变换是非常重要的功能,我们可以自己写函数,基于原始数据做某种计算,并在图上表现出来,也可以通过它改变geom_xxx函数画图的默认统计参数。

  • 坐标系统(Coordinante)

坐标系统控制坐标轴,可以进行变换,例如XY轴翻转,笛卡尔坐标和极坐标转换,以满足我们的各种需求。

坐标轴翻转coord_flip()实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(small)+geom_bar(aes(x=cut,fill=cut))+coord_flip()

转换成极坐标可以由 coord_polar()实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(small)+geom_bar(aes(x=factor(1),fill=cut))+coord_polar(theta="y")ggplot(small)+geom_bar(aes(x=factor(1),fill=cut))ggplot(small)+geom_bar(aes(x=factor(1),fill=cut))+coord_polar(theta='y')#就是饼图#这个bar图是统计cut的各个因子出现的次数,来作为Y轴。

合并画多个饼图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(new_a,aes(x ="",y=V3,fill=V2)) +geom_bar(width = 3, stat="identity")+coord_polar("y")+ facet_wrap(type~V1)+theme(text=element_text(face='bold'))

以及风玫瑰图(windrose)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(small)+geom_bar(aes(x=clarity,fill=cut))+coord_polar()

  • 主题

ggplot2提供一些已经写好的主题,比如 theme_grey()为默认主题,我经常用的 theme_bw()为白色背景的主题,还有 theme_classic()主题,和R的基础画图函数较像。

还有二维密度图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(diamonds, aes(carat, price))+stat_density2d(aes(fill = ..level..), geom="polygon")+scale_fill_continuous(high='darkred',low='darkgreen')#其中..level..是生成的变量

好了,这篇诚意之作就写到这里,再次祝大家新年快乐!

欢迎把文章分享给你身边的朋友!

如果想知道如何访问外国网站,也可以加群请教哦~

生信菜鸟团QQ群:201161227 (所剩名额不多,请提高手速)

文:Jimmy & 一只思考问题的熊

校对编辑:一只思考问题的熊

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
R绘图-ggplot2 (2)
#这一小节介绍标尺,在对图形属性进行映射之后,使用标尺可以控制这些属性的显示方式,
生信补给站
2020/08/06
9090
R语言绘图之ggplot2包「建议收藏」
6月份一直在忙期末考试,今天来迅速的学习下ggplot2包的简单绘图。 R的基础包里面也有很多画图函数,例如plot();barplot();qqplot(); 但是还有大名鼎鼎的ggplot2包,用这个包的函数画出的图比较漂亮,而且使用灵活。
全栈程序员站长
2022/07/23
2.2K0
R语言绘图之ggplot2包「建议收藏」
高阶可视化绘图系统:ggplot2入门
ggplot2是《The Grammar of Graphics》/《图形的语法》中提出了一套图形语法,将图形元素抽象成可以自由组合的要素,类似Photoshop中的图层累加,ggplot2将指定的元素/映射关系逐层叠加,最终形成所图形。更加深入学习ggplot2,请参考《ggplot2: 数据分析与图形艺术》。
1480
2019/07/22
1.7K0
高阶可视化绘图系统:ggplot2入门
ggplot2|详解八大基本绘图要素
ggplot2是由Hadley Wickham创建的一个十分强大的可视化R包。按照ggplot2的绘图理念,Plot(图)= data(数据集)+ Aesthetics(美学映射)+ Geometry(几何对象)。本文将从ggplot2的八大基本要素逐步介绍这个强大的R可视化包。
生信补给站
2020/08/05
7.2K0
ggplot2|详解八大基本绘图要素
R数据可视化之ggplot2 (一)
学完R语言的基本操作后,我们还可以继续学习R的几大著名而且使用强大的包,今天讲其中的一个,就是ggplot2,至于这个包的评价和地位,我就不多说了,感兴趣可以百度,它绝对是数据可视化的利器,好了,我们先来开始简单介绍一下这个包. 先说说我们人手工作图的方式,1,先画一个坐标轴,2,然后根据数据在图上画图形3,在基础的图形上加一些注释,或加一些对比.基本上这就是我们作图的方式,那么ggplot2就跟这差不多了,1.先设定坐标轴和数据2,选择要画图形的类型3,添加一些图形,4,丰富一下图形的信息.ggpl
小莹莹
2018/04/23
2K0
R数据可视化之ggplot2 (一)
阿榜的生信笔记6-R作图
哈喽,我是学习生物信息学的阿榜!非常感谢您能够点击进来查看我的笔记。我致力于通过笔记,将生物信息学知识分享给更多的人。如果有任何纰漏或谬误,欢迎指正。让我们一起加油,一起学习进步鸭? 这份思维导图可以
用户10480134
2023/04/30
5980
是Excel的图,不!是R的图
excel作为一个强大的统计工具,自身包含着一部分数据可视化的功能。R作为可视化的大势,自然也可以画出这些图,有一篇就通过ggplot2包进行了部分总结,甚是有趣,小编复刻学习了一番,现对代码做简单注释,以作分享。
生信宝典
2019/08/01
4.1K0
是Excel的图,不!是R的图
跟小洁老师学习R语言的第六天
图片 图片 常用可视化R包 作图 base ggplot2(特殊语法:列名不带引号,行末写加号) 图片 颜色:color 大小:size 形状:shape 图片 透明度:alpha 填充颜色:fill(既有边框又有内心的,才需要color和fill两个参数) 映射和手动设置的区别 图片 自行指定映射的具体颜色 ggplot(data = iris)+ geom_point(mapping = aes(x = Sepal.Length, y = Pe
贝诺酯
2023/03/16
5400
R语言作图
作图baseggplot2 ★ggpubr拼图par里的mfrowgrid.arrange cowplotcustomLayoutpatchwork ★导出经典三段论ggsave ★(属于ggplot2,可以存储)eoffice (可以导出为ppt)ggplot2语法入门级绘图模板ggplot(data=<DATA>)+ <GEOM_FUNCTION>(mapping=aes(<MAPPINGS>)) #ggplot() 括号里面是数据 例如 ggplot(data=iris)+ geom_po
大胖橘
2023/03/14
1.6K0
生信技能树 R语言入门 ggplot2画图
ggplot常用的五个参数:color, size, shape, alpha, fill;shape有25中形状
大茗
2023/04/05
8410
跟我一起ggplot2(1)
ggplot2 R的作图工具包,可以使用非常简单的语句实现非常复杂漂亮的效果。 qplot 加载qplot library(ggplot2) # 测试数据集,ggplot2内置的钻石数据 qplot(carat, price, data = diamonds) dsmall <- diamonds[sample(nrow(diamonds), 100), ] #对diamonds数据集进行抽样 #1. 按color,size,shape的基本分类可视化      #1.1 简单的散点图(利用color分
cloudskyme
2018/03/20
2.2K0
跟我一起ggplot2(1)
生信技能树学习笔记-day6
---title: "生信技能树学习笔记"author: "天空"引用自生信技能树date: "2023-01-04"output: html_document---R语言作图1. 常用可视化R包图片2. R基础包、ggplot2和ggpubr之间的绘图差别图片图片#作图分三类#1.基础包 略显陈旧 了解一下plot(iris[,1],iris[,3],col = iris[,5]) text(6.5,4, labels = 'hello')图片# dev.off() #关闭画板#2.ggplot2 中坚力
天空UP
2023/01/04
5870
十一、画图(ggplot2、ggpubr)及图片保存
Q1 :能不能自行指定映射的具体颜色? 想要自行指定映射的颜色,就必须要有映射。
叮当猫DDM
2023/02/09
2.3K0
R语言基础笔记-03(ggplot2)
<GEOM_FUNCTION>(mapping =aes(<MAPPINGS>))
我不知道
2023/03/14
8300
生信技能树R语言学习直播配套笔记
1.1 判断数据类型class() 1.2 按Tab键自动补全1.3 数据类型的判断和转换 (1)is 族函数,判断,返回值为TRUE或FALSE
生信技能树
2022/06/08
1.2K0
生信技能树R语言学习直播配套笔记
R语言ggplot2画环状柱形图(circular barplot)的简单小例子
偶然间找到了一份教程利用ggplot2绘制环状柱形图,个人感觉非常适合用来展示叶绿体基因组蛋白编码基因的dn/ds值,因为不仅能够通过柱状图的高低来比较dn/ds值的大小,还能够通过环状展示蛋白编码基因在叶绿体基因组上所处的位置
用户7010445
2021/04/21
5.1K0
R语言ggplot2画环状柱形图(circular barplot)的简单小例子
ggplot2修改坐标轴详细介绍
ggplot2的每个细节都是可以修改的,非常推荐大家系统学习一下,用到再学确实是一种不错的方式,但是如果要提高进阶,还是有必要系统学习的。
医学和生信笔记
2022/11/15
12K0
ggplot2修改坐标轴详细介绍
R语言 基础作图
*ggplot2中通过不同的geom函数生成图层,从前往后覆盖,因此需要考虑函数书写的顺序
Magnolia
2023/01/06
1.4K0
「R」数据可视化4 : 直方图/条形图
本文作者蒋刘一琦,自嘲是一个有艺术追求的生信狗,毕业于浙江大学生物信息学专业,目前在复旦大学就读研究生,研究方向为宏基因组。
王诗翔呀
2020/07/06
2.9K0
「R」数据可视化4 : 直方图/条形图
R语言作图基础20230206
ps:高级绘图函数是指可以绘制出一张图,而低价绘图函数是指在图中添加的“零部件”,低级绘图函数必须在高级绘图函数的基础上才能绘制,二者都是base包的内容
顾卿岚
2023/02/08
1.5K0
相关推荐
R绘图-ggplot2 (2)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验