语法突破介绍了一个图层由五个部分组成:

  • 数据, 必须是数据框(data frame)
  • 一组图形属性映射 aes
  • 几何对象 geom
  • 统计变换 Stat
  • 位置调整 position

创建绘图对象

数据和图形属于映射, 参数映射主需要将图形属性和变量名放到函数 aes() 即可.

1
p <- ggplot(diamonds, aes(carat,price, colour = cut))

图层

图层是通过 + 来添加的.

1
layer(geom,geom_params, stats, stat_params, data, mapping, position)

图层也可以通过快捷函数来简化代码, 只需要 stat 或 geom 参数. 这类快捷函数都有相同的形式: 以 geom 和 Stat 开头.

参数定义了图层的各种组件:

  • mapping 图形属性映射, 通过 aes() 函数来设定.
  • data 一个数据集
  • geom 和 stat 的参数
  • geom 和 stat 我们修改 geom 的默认的 stat 值或者 stat 的默认的 geom 值
  • position 选择一种调整对象重合的方式

图层是普通的 R 对象, 所以可以存储到变量中去:

1
2
3
> library(scales)
> bestfit <- geom_smooth(method = "lm", se = F, colour = alpha("steelblue", 0.5), size = 2)
> qplot(sleep_rem, sleep_total, data = msleep) + bestfit

数据

数据必须是一个数据框.

可以用 %+% 来添加新的数据集以代替原来的数据集.

1
2
3
4
> p <-ggplot(mtcars, aes(mpg,wt,colour = cyl)) + geom_point()
> p
> mtcars <- transform(mtcars, mpg = mpg^2)
> p %+% mtcars

数据是以副本而不是引用的形式存储到图形对象中的.

图形属性映射

aes() 函数用来将数据变量映射到图形中.

1
aes(x =weight, y = height, colour = age)

事例:

1
2
3
4
5
6
7
8
> p <- ggplot(mtcars)
> p <- p + aes(wt,cyl)
> p
> p + geom_point()
> summary(p)
data: mpg, cyl, disp, hp, drat, wt, qsec, vs, am, gear, carb [32x11]
mapping: x = wt, y = cyl
faceting: facet_null()

可以通过 + 的符号添加和修改新的参数和属性.

一个图层里设定额属性映射支队改图层起作用

除了可以讲图形属性映射到一个变量, 同时也可以在图层参数中将其设定为一个单一值.

1
2
3
> p <- ggplot(mtcars, aes(mpg,wt))
> p + geom_point(colour = "darkblue") #深蓝色
> p + geom_point(aes(colour = "darkblue")) #桃红色

分组

几何对象大致可以分为个体几何对象(individual)和群组几何对象(collective).

图中所有离散型变量的交互作用被设为分组的默认值.

自定义分组结构, 即将 group 映射到在不同组有不同取值的变量.

多个分组与单个图形属性

将数据分成若干组, 并用相同的方式对每个组进行渲染.

1
> p <- ggplot(Oxboys, aes(age, height, group = Subject)) + geom_line()

不同图层上的不同分组

在需要统计汇总信息时, 不同的图层由不同的分组图形属性, 我们需要基于整体数据进行分组:

1
> p + geom_smooth(aes(group = 1), method = "lm", size = 2, se = F)

修改默认分组

图像中含有离散变量, 绘制连接所有分组的线条, 需要使用特定的绘图策略:

1
2
3
> boysbox <- ggplot(Oxboys,aes(Occasion, height)) + geom_boxplot()
> boysbox
> boysbox + geom_line(aes(group = Subject), colour = "#3366FF")

默认的分组变量是: Occasion 和 height, 分组条件是 Subject.

匹配图形属性和图形对象

如何将个体的图形属性映射给整体的图形属性.

R 不能绘制不同线条类型相连接的线条.

线性插值法可以做到将渐变的线条类型做图形属性的变换.

几何对象

结合对象简称为 geom, 每一个几何对象都有一个默认的统计变换, 并且每一个统计变换都有一个默认的几何对象.

统计变换

简称 stat, 一个统计变换必须是一个位置尺度不变量.

1
> ggplot(diamonds,aes(carat)) + geom_histogram(aes(y = ..density..), binwidth = 0.1)

生成变量的名字必须要用 .. 围起来. 这样可以防止元数据集中的变量和生成变量重名造成混淆.

位置调整

所谓位置调整, 就是对图层中的元素位置进行微调.

名称 描述
dodge 避免重叠, 并排放置
fill 堆叠图形元素并将高度标准化为1
identity 不做任何调整
jitter 给点添加扰动避免重合
stack 将图形元素堆叠起来

整合

结合几何对象和统计变换

使用不同的几何对象来展示结果: 面积, 点和瓦块(tile).

显示已计算过的统计量

可以用 stat_identity() 将汇总过的数据直接使用而不需要进行统计变换.

改变图形属性和数据集

将不同的数据画在不同的图层上.

1
2
3
4
> require(nlme,quiet = T, warn.conflicts = F)
> model <- lme(height ~age, data = Oxboys, random = ~ 1 + age | Subject)
> oplot <- ggplot(Oxboys,aes(age,height,group = Subject)) + geom_line()
> oplot