ggplot.1.md 7.9 KB

3.2 用ggplot2作图

ggplot2是目前流行的R绘图包,作者是Hadley Wickham, R领域的牛人,另一个流行的R包dplyr也是他的作品. ggplot2是The Grammar of Graphics的实现.这是一种优雅的绘图语法,gg是它的缩写.使用ggplot2,你只需要提供数据,要绘制什么样的图形,并告诉数据与图形属性的映射(对应)关系,其余的任务你就不用关心了,由ggplot2帮你完成.

数据的结构我们在前面的章节中已经讲过.数据很抽象,不便于理解.把抽象的数据用直观的图形方式表示出来,人们就很容易看到数据的特征.把数据的逻辑映射到图形的过程叫做数据的可视化(data visualization).数据可视化是数据分析和理解的必不可少的步骤.

图形由多个图形对象构成,图形对象是几何对象(geometry object, 简称geom),包括点、线、面、体等,每个图形又有它的视觉属性(aesthetics attribute, 简称aes, aesthetics的意思是美学、美术,这里指图形的视觉特性),包括在图形中的位置、大小、粗细、颜色、阴影等。根据需要建立的数据与图形及其属性之间的对应关系叫做映射(mapping)。

ggplot2中图形的组成部分有:

  • data: 数据,数据是图形的基础,是描述事物的基本变异。数据的结构决定图形的选择。
  • geom: 几何图形,表示几何图形的类型 point: 点,默认类型 smooth: 平滑曲线及其误差范围,默认使用lowess平滑 boxplot: 箱线图 histogram: 直方图,适用于一维数据 freqpoly: 频率多边形 density: 密度分布 bar: 柱形图
  • mapping: 数据到几何图形的映射,图形属性通过aes()函数指定,视觉属性有x,y,alpha,color,fill,linetype,shape,size。 x,y: x轴、y轴与数据的映射关系 alpha: 数据映射为图形元素的透明度 color: 数据映射为图形元素的颜色 fill: 数据映射为图形元素的填充颜色 linetype: 数据映射为图形元素的线型 shape: 数据元素映射为图形元素的形状 size: 数据元素映射为图形元素的大小
  • scales: 标尺。标尺控制数据向视觉属性的映射逻辑,包括尺度变换和连续性。把数据空间的值映射到图形的视觉属性,可以是颜色(color)、形状(shape)或大小(size)。scales绘制图例(legend)或者坐标轴(axis)。标尺是度量的基准,处理数据度量尺度的变换,同时处理数据的连续性和离散性与视觉属性之间的关系。视觉属性有四种标尺: scale_continuous():数据的连续取值映射为视觉属性的取值
    scale
    discrete():数据的离散取值映射为视觉属性取值 scaleidentity():使用数据值作为视觉属性取值 scale_mannual():手工指定离散的数据值与图形属性之间的关系 其中的*替换成x,y,color等视觉属性。如scale_color_continuous()表示连续取值的颜色标尺

对于x和y类图形属性,有如下几种特殊的标尺:

scale_x_date(labels=date_format("%m/%d"), breaks=date_breaks("2 weeks"))
scale_x_datetime()
scale_x_log10()
scale_x_reverse()
scale_x_sqrt()

对于color和fill类的图形属性,有如下几类特殊标尺:

scale_fill_brewer(palette="Blues"):根据调色盘生成颜色标尺,可用的调色盘可以通过RColorBrewer::display.brewer.all()命令查看;对于具体的一个调色盘,可以通过RColorBrewer::brewer.pal(n=4, name="Blues")查看具体某个名字调色盘的n个配色值。
scale_fill_grey(start=0.2, end=0.8, na.value="red"):灰度标尺
scale_fill_gradient(low="red", high="yellow"):双色渐变标尺
scale_fill_gradient2(low="red", high="blue", mid="white", midpoint=25):三色渐变标尺

scale_fill_gradientn(colours=terrain.colors(6)):n色渐标尺,其他的调色盘有rainbow(),heat.colors(),topo.colors(),cm.colors()以及RColorBrewer包的调色盘。

  • coord: 坐标系(coordinate system,缩写为coord),坐标系决定数据向图形表面的映射方式和具体程度。
  • facet: 查英汉词典,facet是小平面,方面的意思。在ggplot中一般翻译成“分面”,说实在并不太好,可也找不到更好的词儿来代替。用的人多了,也就习惯了。

图形结构

ggplot图形有图层组成,一个图形(graph)可以包含一到多个图层,默认一个图层,更多的图层可以添加。每个图层都包括数据(data)、视觉属性映射(aesthetic mapping)、几何类型(geom)、统计(stat)、位置调整(position adjustment)五部分组成。

p <- ggplot(dataframe, aes(yday, EVI, colour=year)

ggplot函数的第一个参数为数据(data)。data一般是数据框(data.frame),如果不是数据框,将会自动转换成数据框,数据框也可以在图层中指定。data数据框的字段名(colnames)可以直接用于指定视觉属性,aes也可以在图层中指定,字段名可以用引号括起来,也可以不用。

aes的语法aes(x, y, ...),第一个参数指定x轴的字段,第二个参数指定y轴字段,...代表其他属性,如color, size, shape等。

没有给定任何参数的ggplot()函数构建一个空图形,这个图形可以赋值个一个变量,如p<-ggplot()。赋值命令不会显示图形,R命令行下输入p才打印图形。

添加图层

在图形中添加图层非常方便直观,直接在图形对象后面用"+"链接即可。图形+图层,代表把图层添加到图形的基本框架中去,可以使用连加的形式,如图形对象+图层1+图层2+...,p+layer1+layer2+...

p <- p + layer(geom = "point")

layer函数的语法: layer(geom, geom_params, stat, stat_params, data, mapping, position) 其中:

  • geom: 几何对象的类型,取值可以是"line"、"polygon"
  • geom_params: 几何对象的参数
  • stat: 统计
  • stat_params: 统计参数
  • data: 该图层的数据,每个图层可以分别指定数据,在图层中未指定数据,默认使用图形对象中的数据,如果还没有则出错。
  • mapping: 映射,该图层中几何对象属性与数据之间的映射
  • position: 图层在图形中的位置

例子:

```{r} p <- ggplot(waster.water, aes(x = year)) p <- layer(

geom = "bar",
geom_params = list(fill="steelblue"),
stat = "bin",
stat_params = list(binwidth=2)

) p 以上语句前可以简写成: geom_histogram(binwidth=2, fill="steelblue")

主题

主题控制图表的整体外观,由一系列视觉特性的设定组成。主题的目的是为了实现整个图形个元素的协调、统一,给人一种视觉上的和谐美感,或者适应某种特殊的需求,如期刊文章对图表的特殊要求,报告展示时与报告内容与风格的一致。ggplot2内置了一些常用主题:

  • 黑白:theme_bw(),
  • 经典:theme_classic()
  • 灰色:theme_grey()
  • 简单:theme_minimal() ggthemes包,包含一些其他主题,根据需要选用。 主题应用方法:
  • 自定义主题。

图例

图例位置:theme(legend.position="bottom"),其他选项有top、left和right。

图例类型: 颜色条(colorbar),适合连续变量; legend为键值对,适合离散变量; none,图形属性为none,该属性不显示图例。

标签(label)

标签提供对图形元素的描述性信息,如图表的标题、副标题,坐标轴标签,图形的注释等。

  • 图表标题(ggtitle) ggtitle("title of the graph"):指定图形名称
  • x轴标签 xlab("label of x")
  • y轴标签 ylab("label of y"):指定y轴标签
  • 图例标签 需要使用scale_*()的name和labels选项指定

ggplot语法

用qplot快速作图

qplot函数是qqplot的简化版,在处理常用的不太复杂的作图任务时可以简化构图语法,好理解,少打字。

学习资源:R for Data Science