每一幅图形一定拥有两个位置标度,一个指定水平位置(x 标度),另一个是指定竖直标度(y 标度)。ggplot2 提供了连续性、离散型(针对因子型、字符型、逻辑向量)、以及日期型。
对所有的位置坐标来说,修改坐标轴范围是一项常见任务,使用辅助函数xlim()和ylim()可以减轻我们工作量。比如:
- xlim(10,20):从10 到20 的连续型标度;
- xlim(”a”, “b”, “c”):离散型标度;
- xlim(as.Date(c(“2008-05-01”, “2008-08-01”))):从2008-05-01 到2008-08-01 的日期型标度。
##连续型:
常见的连续型位置标度有scale_x_continuous、scale_y_continuous,它们均是将数据映射到x 轴和y 轴。而最有趣的变式是通过变换来生成的,每一个连续型标度都可以接受一个trans 参数,允许指定若干种线性或非线性的变换。
名称 | 变换函数 | 逆变换函数 |
asn | ||
exp | ||
identity | ||
log | ||
log10 | $ 10^y$ | |
log2 | ||
logit | ||
pow10 | $10^x $ | |
probit | ||
recip | $ x^{-1}$ | $ y^{-1}$ |
reverse | ||
sqrt | $ x^{\frac{1}{2}}$ |
对于连续型位置标度,变换有简写形式,比如scale_x_continuous(trans = “log10”)可以简写为scale_x_log10()。参数trans 对任意连续型标度均有效,但只有位置标度有简写形式。
当然,可以直接对变量进行变换,而不使用标度变换。比如,直接使用函数log10(x),而不是scale_x_log10(),绘图区域是完全一样的,但坐标轴和标签是不一样的。
set.seed(1410)
dsmall <- diamonds[sample(nrow(diamonds), 100), ]
qplot(data=dsmall,carat,price) + scale_x_log10() + scale_y_log10()
qplot(data=dsmall,log10(carat),log10(price))
##日期与时间:
日期与时间值基本属于连续型,但在标注坐标轴时有着特殊的处理方式。目前仅支持date 类日期值、POSIXct 类时间值。如果日期与时间是其他格式的,则需用 as.Date()或as.POSIXct()对其进行转换。
对于日期坐标轴,有三个参数可以控制其外观与刻度位置:major、minor、format。参数细节如下:
- 参数 major 和 minor 用以按照时间的单位,即年(year)、月(month)、周(week)、日(day)、时(hour)、分(minute)、秒(second)来指定主要和次要断点的位置,并且允许以这些单位的倍数出现。例如:major=”2 weeks”将在每隔两周的位置放置一个主刻度。如果未指定,日期标度可以自动选择合适的默认值;
- 参数format 指定了刻度标签的格式。以下表列出了用于展现日期各个组成部分的特殊字符。例如,字符串“%Y-%m-%d”表示以“年-月-日”的格式显示日期。
编码 | 含义 |
%S | 秒(00-59) |
%M | 分钟(00-59) |
%l | 小时,12 小时制(1-12) |
%I | 小时,12 小时制(01-12) |
%H | 小时,24 小时制(00-23) |
%a | 缩写的周几(Mon-Sun) |
%A | 全称的周几(Monday-Sunday) |
%e | 某月中的某天(1-31) |
%d | 某月中的某天(01-31) |
%m | 以数值表示的月份(01-12) |
%b | 缩写的月份(Jan-Dec) |
%B | 全称的月份(January-December) |
%y | 不含世纪的年份(00-99) |
%Y | 含世纪的年份(0000-9999) |
library(scales)
p <- qplot(date,psavert,data=economics,geom='line') + ylab('Personal savings rate') +
geom_hline(xintercept=0,colour='grey50')
p
p + scale_x_date(breaks=date_breaks("5 years"))
p + scale_x_date(breaks=date_breaks("5 years"),minor_breaks='1 years')
p + scale_x_date(breaks=date_breaks("5 years"),labels=date_format('%Y'))
在左上图中,使用的默认标度;右上图,使用参数breaks=date_breaks(“5 years”)指定每隔5 年显示一个刻度值;在左下图中,参数minor_breaks=‘1 years’是设定坐标轴显示最小刻度(即每一个刻度代表一年);在右下图中,参数labels=date_format(’%Y’)是指定刻度标签格式。
##离散型:
离散型位置标度将输入中的各个水平映射为整数。结果的顺序可用参数breaks 进行控制,不想要的水平可以使用limits(或xlim、ylim)进行丢弃。由于我们经常也会在图形的非整点位置放置标签和标注,所以离散型位置标度也可以接受连续型的值。如果你尚未调整breaks 或limits,某个因子水平的所在位置的数值表示可以使用as.numeric()进行计算:以从1 开始的整数表示。