专栏名称: 生信百科
依托高校科研平台,面向生物信息科研工作者。生物信息学习资料;常见数据分析技巧、流程;公共数据库分享;科研思路分享;
51好读  ›  专栏  ›  生信百科

玩转数据(四)::ggplot2 data visualization

生信百科  · 公众号  · 医学  · 2017-06-21 23:35

正文


耳听为虚,眼见为实 ,数据可视化(Visualise)是整个数据分析中重要的一环,主要旨在借助于图形化手段,清晰有效地传达与沟通信息,实现对于相当稀疏而又复杂的数据集的深入洞察,可视化工作的好坏直接决定了我们是否能有效的发现问题,看到结论。

说到底我们都是视觉动物,看得见的东西很好理解不是?今天就给大家分享,数据可视化领域重要的R包-- ggplot2

按照《图形的语法》一书中的观点,一张统计图形就是

从数据到点、线或方块等几何对象的颜色、形状或大小等图形属性的一个映射,


其中还可能包含对数据进行统计变换(如求均值或方差),


最后将这个映射绘制在一定的坐标系中就得到了我们需要的图形。


图中可能还有分面,就是生成关于数据的不同子集的图形。


ggplot2正是基于Leland Wilkinson在Grammar of Graphics中提出的理论,取首字母缩写再加上plot,得名ggplot。

ggplot2的核心理念是将绘图与数据分离,数据相关的绘图与数据无关的绘图分离

ggplot2是按图层作图 ggplot2保有命令式作图的调整函数,使其更具灵活性 ggplot2将常见的统计变换融入到了绘图中。


先来介绍一些ggplot2中的基本概念:


图形属性(aes) 横纵坐标、点的大小、颜色,填充色等
几何对象(geom_) 上面指定的图形属性需要呈现在一定的几何对象上才能被我们看到,这些承载图形属性的对象可能是点,可能是线,可能是bar
统计变换 (stat_) 比如求均值,求方差等,当我们需要展示出某个变量的某种统计特征的时候,需要用到统计变换


ggplot2将基本图形要素分为:

不同的几何对象((geom)、

不同的几何对象属性(aes)、

不同的子窗口(facet)等。


我们的作图过程,就是将自己所需要表达的信息对应于上述各种图形工具。上述图形工具应当可以进行自由的组合,来用于表达复杂多变的信息。

1. ggplot2的逻辑

用过photoshop的都明白图层的概念,ggplot2的逻辑其实就是真正实现了一个图层叠加的概念,一个图层一个图层一步一步地画出来:一句语句代表一个图层,最后把所有图层重叠起来形成最终的图片。

举个栗子:

library(ggplot2) #加载包
p ggplot(mtcars, aes(wt, mpg))  +  #开始绘图    
geom_point(aes(colour = qsec))    #添加点 p

p + geom_smooth()



可以看出,ggplot的绘图有以下几个特点:

第一,有明确的起始(以ggplot函数开始)与终止(一句语句一幅图);

其二,图层之间的叠加是靠“+”号实现的,越后面其图层越高。

其三,就是对于分组数据的处理

p + facet_grid( ~ gear)

2. ggplot2的要素

ggplot图的元素可以主要可以概括如下【 参考: 黄宝臣 】:

最大的是plot(指整张图,包括background和title),


其次是axis(包括stick,text,title和stick)

legend(包括backgroud、text、title)


facet,又可以分为外部strip部分(包括backgroud和text)

内部panel部分(包括backgroud、boder和网格线grid,其中粗的叫grid.major,细的叫grid.minor)

大致见下图,这部分内容的熟悉程度直接影响到对于theme的掌握,因此希望大家留心:



3. ggplot2图层以及其他函数的分类

下面来详细理解下ggplot2里的绘图命令

ggplot2里的所有函数可以分为以下几类:

用于运算(fortify_,mean_等)

初始化、展示绘图等命令(ggplot,plot,print等)

按变量组图(facet_等)

真正的绘图命令(stat_,geom_,annotate)这三类就是实现一个函数一个图层的核心函数。

微调图型:严格意义上说,这一类函数不是再实现图层,而是在做局部调整:
scale_:直译为标尺,这就是与aes内的各种美学(shapecolorfillalpha)调整有关的函数。
guides:调整所有的text
coord_:调整坐标。
theme:调整不与数据有关的图的元素的函数。

4. 绘图

我们再来解构下面的代码, 来分析一下ggplot2是怎么作图的。

首先,我们来看一下mtcars这个数据集长什么样:

View(mtcars)


作图代码:

p ggplot(mtcars, aes(wt, mpg))  +   #code 1
  geom_point(aes(colour = qsec),stat = "sum") +  #code 2 
 facet_grid( ~ gear) +  #code 3
 annotate("text", x = 4, y = 30, label = "paste(italic(R) ^ 2, \" = 0.75\")", parse = TRUE) #code4
p


code 1 :ggplot首先载入了这个mtcars的集合,然后指定给了mpg作为其y坐标位置,wt为x坐标位置。

code 2:  指定了qsec作为其染色的标准(分组),然后开始绘制,读取mtcars$mpg[1]、mtcars$wt[1],确定位置,然后为其染成mtcars$qsec[1]颜色;再绘制第二点。。。

code 3 : 按照gear属性在 不同的子窗口(facet)展示数据特征。

code 4 : 在指定的位置(x,y)注释(label)指定的文字。








请到「今天看啥」查看全文