### 标尺 标尺(scale)也叫尺度。是把数据映射到显示设备的变换。数学上叫做尺度变换。物质的本质是变异,变异的基础是它的参照。使用不同的参照会得到不同的数值。尺度变换可能是线性的也可能是非线性的,如对数变换,y=log10(x)。 数据值与物理的绘图单元之间的变换就需要尺度变换。如把1:10序列绘制在一张纸上,要把纸上的一条线段分成10个等分,每个等分对应数值1,或者首先绘制一个10厘米的线段,每厘米线端代表1。这种映射函数就是尺度变换。同样绘制1到10这个数列,不同大小的纸张上面绘制不同大小的图时选用的尺度不同。这只是一个简单的例子,但能够说明什么是尺度。 ggplot中标尺控制数据向视觉属性的转换。标尺不仅包括尺度变换算的逻辑(trans),还包括其显示的属性,如标签、刻度、上限、下限、位置等。 #### 坐标轴轴标尺(scale_x_, scale_y_) ``` scale_x_continuous(name = waiver(), breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, expand = waiver(), oob = censor, na.value = NA_real_, trans = "identity", position = "bottom", sec.axis = waiver()) scale_y_continuous(name = waiver(), breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, expand = waiver(), oob = censor, na.value = NA_real_, trans = "identity", position = "left", sec.axis = waiver()) scale_x_log10(...) scale_y_log10(...) scale_x_reverse(...) scale_y_reverse(...) scale_x_sqrt(...) scale_y_sqrt(...) ``` 参数: * name: 标尺名称,用作坐标轴和图例标题。如果取值为NULL,标尺名取自第一个视觉属性映射。默认值为NULL。 * breaks: 刻度,或称ticks,可能的取值是 - NULL: 无breaks - waiver(): 默认值,由变换的输入对象(也就是变量)计算得到。 - 一个位置向量 - 一个函数,用极限作为输入,输出breaks。 * minor_breaks: 最小的刻度值 可能的取值与breaks相同。 * labels: 标签 取值为: - NULL 没有标签 - waiver() 默认取自变换对象的计算结果 - 字符串向量,用于手动指定标签,其长度必须与刻度数相同。 - 一个用刻度作为输入输出标签的函数。 * limits: 上下限,两个元素的数值向量,分别表示标尺的下限和上限。用NA显示数值的实际上下限。 * expand: 标尺的扩展,用于扩展标尺的显示范围,比如你向把图表的位置向上或向右移,让他不要太靠近坐标轴,就可以设置expand扩展标尺。expand取值为一个两元素的数值向量。对于连续型变量,默认为c(0.05,0),即曲线会右移0.05个刻度的距离,而y轴方向不变。对于离散型变量,默认值为c(0, 0.6),即上0.6个刻度的距离。 * oob: 处理出界limits的函数。默认用NA取代。 * na.value: 缺失值将被这个值取代。 * trans: 尺度变换名称.内置的变换有,"asn", "atanh", "boxcox", "exp", "identity", "log", "log10", "log1p", "log2", "logit", "probability", "probit", "reciprocal", "reverse" and "sqrt". * position: 坐标轴位置。纵坐标取值为"left"或"right",横坐标取值为"top"或"bottom"。 * sec.axis: 指定第二个坐标轴,即双坐标轴 * ...: 其他参数。 #### 例子 使用默认值。 ```{r} p1 <- ggplot(mpg, aes(displ, hwy)) + geom_point() ``` 自定义坐标轴标签: ```{r} p1 + scale_x_continuous("Engine displacement (L)") + scale_y_continuous("Highway MPG") ``` 用NULL去掉坐标轴标签 ```{r} p1 + labs(x = NULL, y = NULL) ``` 修改坐标轴上下限 ```{r} p1 + scale_x_continuous(limits = c(2, 6)) ``` 或者使用简便的方式 ```{r} p1 + xlim(2, 6) ``` 选择要显示的刻度 ```{r} p1 + scale_x_continuous(breaks = c(2, 4, 6)) ``` 添加这些刻度对应的标签 ```{r} p1 + scale_x_continuous( breaks = c(2, 4, 6), label = c("二", "四", "六") ) ``` 标签格式化 ```{r} df <- data.frame( x = rnorm(10) * 100000, y = seq(0, 1, length.out = 10) ) p2 <- ggplot(df, aes(x, y)) + geom_point() p2 + scale_y_continuous(labels = scales::percent) ``` y轴标签显示%. 在scales包中,常用的还有scales::dollar,scales::comma 坐标变换 ```{r} p1 + scale_y_log10() p1 + scale_y_sqrt() p1 + scale_y_reverse() ``` 最后一个按x轴反转.