|
@@ -0,0 +1,130 @@
|
|
|
|
+### 标尺
|
|
|
|
+
|
|
|
|
+标尺(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轴反转.
|