标度(Scale)控制着数据到图形属性的映射. 标度将我们的数据转化为视觉上可以感知的东西: 例如大小, 颜色, 位置和形状. 标度也为我们提供了读图时所用的工具: 坐标轴和图例(总的来说可以成为引导元素).

执行标度的过程分为三步: 变换(transformation), 训练(training)和映射(mapping)

标度可以粗略的分为四类: 位置标度, 颜色标度, 手动离散型标度以及同一型标度.

标度的工作原理

标度的定义域(即数据空间)和标度的值域(即图形属性空间)

标度的定义域要么是某些值组成的集合, 要么就是一个实值区间.

标度的值域也可以是离散型或连续型的.

将定义域映射到值域的过程包括以下阶段:

变换 (仅针对连续型的定义域)对数据进行变换后再进行展示往往是有益的, 例如对数据取对数或开根号.

训练 通过学习(learning)得到标度的定义域.

映射 执行映射数据到图形属性的函数.

用法

标度可以为连续型(变量为数值时)或离散型(变量为因子, 逻辑值, 字符时)

在添加一个不同的标度或修改默认标度的某些特征, 我们必须构造一个新的标度, 然后使用 + 将其添加到图形上. 所有的标度构建器都有一套通用的命名方案. 以 scale_ 开头, 接下来是图形属性的名称, 最后以标度名称结尾.

实例:

1
2
3
4
5
> p <- qplot(sleep_total, sleep_cycle, data = msleep, colour = vore)
> p
> p + scale_color_hue()
> p + scale_color_hue("What\nit eat?", breaks = c("herbi","carni","omni",NA), labels = c("plants","meat","both","don't know"))
> p + scale_color_brewer(palette = "Set1")

得到图层:

ggplot2-1

标度详解

标度大致分为四组:

位置标度 将连续型, 离散型和日期 - 时间型变量映射到绘图区域, 以及构造对应的坐标轴.

颜色标度 将连续型和离散型变量映射到颜色.

手动标度 用于将离散型变量映射到我们选择符号大小, 线条类型, 形状或颜色, 以及创建对应的图例.

同一型标度 直接将变量值绘制为图形属性, 而不去映射它们.

通用参数

name: 设置坐标轴或图例上出现的标签. 可以指定字符串和数学表达式. 所以使用三个辅助函数 xlab(), ylab(), labs() 可以帮助我们减少部分键入.

1
2
3
4
5
6
7
> p <- qplot(cty,hwy,data = mpg, colour = displ)
> p
> p + scale_x_continuous("City mpg")
> p + xlab("City mpg")
> p + ylab("Highway mpg")
> p + labs(x= "City mpg", y="highway",colour = "Displacement")
> p + xlab(expression(frac(miles, gallon)))

得到图层:

ggplot2-2

limits 固定标度的定义域. 连续标度接受一个长度为 2 的数值型向量. 离散型标度接受一个字符型向量. 一旦设定了 limits, 数据将不再进行任何训练. 限制定义域可以帮助我们移除不想再图形上展示的数据, 同时也可以保证要进行比较的多个图形中的绘制范围一致.

breaks 和 labels: breaks 控制着显示在坐标轴或图例上的值, 即坐标轴上应该显示哪些刻度线的值,或一个连续型标度在一个图例中将被如何分段.

formatter 如果未指定任何标签, 则将在每个断电出自动调用格式刷(formatter)来格式化生成标签.

位置标度

修改坐标轴范围

xlim() 修改横坐标

ylim() 修改纵坐标

连续型位置标度

scale_x_continuous 和 scale_y_continuous 将数据映射到 x 轴和 y 轴. 每个连续型标度均可几首一个 trans 参数, 荀彧制动若干种线性或非线性变换.

日期和时间

日期和时间值属于连续型, 但在标注坐标轴时有着特殊的处理方式. 如果日期格式不对, 需要先使用 as.Date() 或 as.POSIXct() 进行变换.

参数 major 和 minor 用以按照时间的单位, 即年(year), 月(month), 周(week), 日(day), 时(hour), 分(minute), 秒(second) 来指定主要和次要断点的位置, 并且允许以这些单位的倍数出现.

参数 format 指定了刻度标签的格式.

颜色标度

ggplot2 中使用名为 hcl 色彩空间的现在方案, 有三部分组成: 色相(hue), 彩度(chroma)和明度(luminance)

连续型

scale_colour_gradient() 和 scale_fill_gradient() 双色梯度. 顺序从低到高. 参数 low 和 high 用以控制此梯度两端的颜色.

scale_colour_gradient2() 和 scale_fill_gradient2() 三色梯度.

scale_colour_gradientn() 和 scale_fill_gradientn() n色梯度.

离散型

有两种颜色标度:

scale_colour_hue() 通过沿着 hcl 色轮选取均匀分布的色相来生成颜色.

ColorBrewer 配色.

1
2
3
4
5
6
7
> point <- qplot(brainwt, bodywt, data = msleep, log = "xy", colour = vore)
> area <- qplot(log10(brainwt), data = msleep, fill = vore, binwidth = 1)
> point + scale_colour_brewer(palette = "set1")
> point + scale_colour_brewer(palette = "set2")
> point + scale_colour_brewer(palette = "Pastel1")
> point + scale_fill_brewer(palette = "set1")
> point + scale_fill_brewer(palette = "set2")

ggplot2-3

手动离散型标度

离散型标度 scale_linetype(), scale_size_discrete() 和 scale_shape() 基本上没有选项, 如果你想要制定这些标度, 需要使用手动型标度创建标度: scale_shape_manual(), scale_linetype_manual(), scale_colour_manual()

同一型标度

数据空间和图形属性空间相同时, 可以使用同一型标度(identity scale)

图例和坐标轴

坐标轴和坐标共同被称为引导元素.

  • 标度 name 控制着坐标轴名和图例标题
  • breaks 和 labels 控制哪些刻度标间出现在坐标轴上
  • 主题设置 axis. 和 legend. 控制着坐标轴和图例的整体外观
  • 内部网络线由主要断点和次要断点参数控制 minor_breaks
  • 图例的位置和对其使用主题设置 legend.position 来控制

Cheat Sheet

ggplot2-1

ggplot2-2

一首歌的结尾