今天来学习第六章标度部分的最后一节~
6.6 标度工具箱(Scales Toolbox)
除了调整标度的默认选项之外,你也可以重新创建新的标度,主要分为以下四类:
- 连续型位置标度:用于将整数、数值、日期/时间数据映射到x轴或者y轴的位置上;
- 颜色标度:用于将连续型或离散型变量映射到颜色;
- 手动离散型标度:将离散型变量映射到你选择的大小、形状、颜色、线条等;
- 同一型标度:当你的数据能被R中的绘图函数理解时,数据空间和图形属性空间相同时,可以使用同一型标度,此时默认不绘制图例的
下面我们四种图例详细说明:
1. 连续型位置标度(Continuous Position Scales)
每个图表都有两个位置标度,即x和y。因此,最常见的连续型位置标度就是scale_x_continuous()
和 scale_y_continuous()
,它们可以将数据映射到x轴和y轴。
每个连续型标度都可以接受一个trans
参数,允许指定若干种显性或非线性变换。每一种变换都是由所谓的变换器(“transformer”)实现的。下表是比较常用的变换器:
(截图选自《ggplot2(第一版)》)
注意:在最近更新的第二版ggplot2中,表中的倒数命令(recip)已经改为(reciprocal),其他未更新。
如下例,将y轴转换为倒数(reciprocal):
ggplot(mpg, aes(displ, hwy)) +
geom_point() +
scale_y_continuous(trans = "reciprocal")
将x轴/y轴数值转化成log10:
ggplot(diamonds, aes(price, carat)) +
geom_bin2d() +
scale_x_continuous(trans = "log10") +
scale_y_continuous(trans = "log10")
其中有一些参数有简写形式,如,scale_x_log10()
、scale_x_sqrt()
、scale_x_reverse()
另外,变换器同样可以用于coord_trans()
中,此时变换将在统计量计算完成后进行,详见第七章
日期和时间值基本上属于连续型,但在标注坐标轴时处理方式稍有不同。我们使用Date
和POSIXct
类的时间值。如果是其他格式的,则应当使用as.Date
和as.POSIXct
进行转换。
scale_x_date()
和scale_x_datetime()
的用法和scale_x_continous
用法相似。
date_breaks()
和date_labels()
的用法稍有不同:
date_breaks()
和date_minor_breaks()
:可以设置日期间隔(年、月、星期、日、小时、每分、每秒)作为断点,;例如date_breaks = "2 weeks"
date_labels()
:通过strptime()
和format()
指定特殊格式,如下表
例如,如果你想以14/10/1979
的形式显示日期,可以使用字符串%d/%m/%y
。
再举个栗子,经济数据集(时间序列)中,横轴日期的不同表示方式:
base <- ggplot(economics, aes(date, psavert)) +
geom_line(na.rm = TRUE) +
labs(x = NULL, y = NULL)
base # 默认间隔和时间表示方式
base + scale_x_date(date_labels = "%y", date_breaks = "5 years")
取其中一小段时间("2004-01-01" - "2005-01-01")
,按1个月为间隔:
base + scale_x_date(
limits = as.Date(c("2004-01-01", "2005-01-01")),
date_labels = "%b %y",
date_minor_breaks = "1 month"
)
取其中一小段时间("2004-01-01" - "2004-06-01")
,两个星期为间隔:
base + scale_x_date(
limits = as.Date(c("2004-01-01", "2004-06-01")