ggplot2:语法突破

ggplot2:语法突破

本文主要介绍ggplot2的理论基础:图形图层语法。无论是对于普通用户还是开发人员,图层语法都是非常有用的。对于普通用户而言,它使图形的更新变得简单——每次只需要更新一个特征。该语法的价值在于它从更高的视角审视了图形的构成,它认为图形的每个组件都是可以被修改的。因此,这就给了我们一个作图的基本结构框架,使得图形的绘制更为简单。对于特殊问题,我们还可以利用它很方便地定义新图形。

对于开发人员,图层语法使得向ggplot2里添加新功能变得更方便。你只要添加你所需要的新图形组件,并且继续使用原有的标度和几何对象。另外,图层语法也有助于发现新类型的图形,因为它有效地定义了统计图形的参数空间。

绘制散点图

1
qplot(displ, hwy, data = mpg, colour = factor(cyl))


1
qplot(displ, hwy, data = mpg, geom = "line")


但是需要注意的是,这幅图实际上是没有意义的。

1
2
qplot(displ, hwy, data = mpg, colour = factor(cyl)) +
geom_smooth(data = subset(mpg, cyl != 5), method = "lm")

更复杂的图形示例

1
qplot(displ, hwy, data= mpg, facets = .~year) + geom_smooth()

数据结构

当我们得到一个图形对象时,可以对其进行如下处理:

  • 用print()函数将其呈现到屏幕上;
  • 用summary()函数简单查看其结构;
  • 用save()函数把图形对象保存为rdata文件,然后可以用load()函数重现。
    1
    2
    3
    4
    5
    p <- qplot(displ, hwy, data = mpg, colour = factor(cyl))
    summary(p)
    save(p, file = "plot.rdata")
    load("plot.rdata")
    p

本章中涉及的一些概念

  1. 图形属性(aesthetics):例如点的纵横坐标、大小、颜色等。每个图形属性都可以映射为一个变量或者设定为一个参数。
  2. 标度变换(scaling):我们需要把数据的数值从数据单位转换成电脑可以识别的物理单位(例如像素和颜色),这个转换过程被成为标度转换。
  3. 标度变换先于统计变换,因此统计量都是基于标度变换后的数据计算的。例如对于对数变换,这样可以保证log(x)和log(y)在线性尺度上的图与x与y在对数尺度上的图看起来是一样的。
  4. 计算完统计量之后,所有分面和图层的数据集中的每个标度都会被“训练”。标度的训练将根据小数据集的范围得到整体数据的范围。如果没有这一步,标度将只具有局部的意义,当将不同的层叠加到一起时,他们的位置就会错乱。
  5. 最后,标度映射将数据映射到图形属性中。这是一个局部操作:每个数据集里的变量都映射给相应的图形属性值,生成一个新的数据集后再用几何对象来渲染。
# R

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×