专栏名称: 生信百科
依托高校科研平台,面向生物信息科研工作者。生物信息学习资料;常见数据分析技巧、流程;公共数据库分享;科研思路分享;
目录
相关文章推荐
丁香园  ·  全球 III 期临床试验显示 ... ·  3 天前  
丁香园  ·  国家卫健委发文,支持合规营销 ·  4 天前  
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)指定的文字。


说到这里,介绍下ggplot2大致内置了哪些图:

点(point, text):往往只有x、y指定位置,有shape但没有fill 


线(line,vline,abline,hline,stat_function等):一般是基于函数来处理位置


射(segment):特征是指定位置有xend和yend,表示射线方向


面(tile, rect):这类一般有xmax,xmin,ymax,ymin指定位置


棒(boxplot,bin,bar,histogram):往往是二维或一维变量,具有width属性


带(ribbon,smooth):透明是特征是透明的fill


补:包括rug图,误差棒(errorbar,errorbarh)

有了这些基本元素就可以按照你的需要一步步加图层了(使用“+”)。


总结

总结一下,一个极具诚意的作图应该长成下面这个样子:

ggplot(data = , aes(x = , y = )) +  
    geom_XXX(...) +     #真正的绘图命令
    stat_XXX(...) +     #统计变换
    annotate(...) +     #注释,标注信息
   scale_XXX(...) +    #与aes内的各种美学(shape、color、fill、alpha)调整有关的函数。    coord_XXX(...) +    #调整坐标    guides(...) +       #调整所有的text    theme(...)          #调整不与数据有关的图的元素的函数

这几期的玩转数据只是抛砖引玉,数据挖掘,统计分析博大精深,小编也在持续学习中。

数据准备,清洗,统计分析,可视化及模型构建又很多的R包可以实现。我最喜欢的就是Hadley Wickham 大神的作品。下面的包都可以通过加载tidyverse来一起载入。诗一样的作品有没有。

  • ggplot2, for data visualisation.

  • dplyr, for data manipulation.

  • tidyr, for data tidying.

  • readr, for data import.

  • purrr, for functional programming.

  • tibble, for tibbles, a modern re-imagining of data frames.)


再膜拜下大神,我们一起交流学习进步。