浏览文件内容

添加 'chap3/ggplot_scale.md'

三藏唐 6 年之前
父节点
当前提交
ddac10f04e
共有 1 个文件被更改: 130 次插入, 0 次删除
  1. 130 0
      chap3/ggplot_scale.md

+ 130 - 0
chap3/ggplot_scale.md

@@ -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轴反转.