ggplot2学习笔记之位置标度


每一幅图形一定拥有两个位置标度,一个指定水平位置(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(x) 逆变换函数f1(x)f−1(x)
asn tanh1(x)tanh−1(x) tanh(y)tanh(y)
exp exex log(y)log(y)
identity xx yy
log log(x)log(x) eyey
log10 log10(x)log10(x) 10y10y
log2 log2(x)log2(x) 2y2y
logit log(x1x)log(x1−x) 11+e(y)11+e(y)
pow10 10x10x log10(y)log10(y)
probit Ф(x)Ф(x) Ф1(y)Ф−1(y)
recip x1x−1 y1y−1
reverse x−x y−y
sqrt x12x12 y2y2
 

对于连续型位置标度,变换有简写形式,比如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 开始的整数表示。


 评论