每一幅图形一定拥有两个位置标度,一个指定水平位置(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 参数,允许指定若干种线性或非线性的变换。

名称

变换函数ggplot2数据分析与图形艺术 书本代码 ggplot ylim_字符串

逆变换函数ggplot2数据分析与图形艺术 书本代码 ggplot ylim_Personal_02

asn

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_坐标轴_03

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_坐标轴_04

exp

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_Personal_05

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_字符串_06

identity

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_Personal_07

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_Personal_08

log

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_Personal_09

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_Personal_10

log10

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_Personal_11

$ 10^y$

log2

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_字符串_12

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_坐标轴_13

logit

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_坐标轴_14

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_字符串_15

pow10

$10^x $

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_Personal_16

probit

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_Personal_17

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_坐标轴_18

recip

$ x^{-1}$

$ y^{-1}$

reverse

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_坐标轴_19

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_Personal_20

sqrt

$ x^{\frac{1}{2}}$

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_Personal_21


对于连续型位置标度,变换有简写形式,比如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))

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_坐标轴_22


##日期与时间:
日期与时间值基本属于连续型,但在标注坐标轴时有着特殊的处理方式。目前仅支持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'))

ggplot2数据分析与图形艺术 书本代码 ggplot ylim_字符串_23


ggplot2数据分析与图形艺术 书本代码 ggplot ylim_字符串_24


在左上图中,使用的默认标度;右上图,使用参数breaks=date_breaks(“5 years”)指定每隔5 年显示一个刻度值;在左下图中,参数minor_breaks=‘1 years’是设定坐标轴显示最小刻度(即每一个刻度代表一年);在右下图中,参数labels=date_format(’%Y’)是指定刻度标签格式。


##离散型:
离散型位置标度将输入中的各个水平映射为整数。结果的顺序可用参数breaks 进行控制,不想要的水平可以使用limits(或xlim、ylim)进行丢弃。由于我们经常也会在图形的非整点位置放置标签和标注,所以离散型位置标度也可以接受连续型的值。如果你尚未调整breaks 或limits,某个因子水平的所在位置的数值表示可以使用as.numeric()进行计算:以从1 开始的整数表示。