-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.qmd
101 lines (89 loc) · 4.43 KB
/
index.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# 欢迎 {#welcome .unnumbered}
```{r}
#| echo: false
source(file = "_common.R")
```
::: callout-caution
本书是《现代统计图形》[@msg2021] 的后续第二版,尚处于草创阶段。
:::
书中的代码字体采用美观的 [Source Code Pro](https://ctan.org/pkg/sourcecodepro) 字体, 为方便跨操作系统编译书籍电子版,正文的中文字体采用开源的 [fandol](https://ctan.org/pkg/fandol) 字体。 而本书图形中使用的 Noto 系列中英文字体来自 [Google Fonts 字体库](https://fonts.google.com/),分别是 Noto Sans 无衬线英文字体和 Noto Serif SC 宋体中文字体。 @fig-noto-fonts 中的左、右子图分别展示 Base R 和 ggplot2 [@Wickham2016] 图形中中英文字体的效果。在图形中调用中文字体分两步走,先使用 **sysfonts** 包获取并注册 Noto 相关字体,然后在绘图的时候指定字体,并在代码块选项中启用 `fig.showtext = TRUE`,这样就能在 R Markdown 环境中优雅地绘制含中文的图形。如果在 R Console 中绘图则需加载 **showtext** 包,运行函数 `showtext_auto()`。
```{r}
#| label: fig-noto-fonts
#| fig-cap: "中英文字体设置"
#| fig-subcap:
#| - 'Base R 图形'
#| - 'ggplot2 图形'
#| fig-width: 4.5
#| fig-height: 3.5
#| fig-alt: '汞蒸气的压力随温度的指数级变化'
#| fig-showtext: true
#| layout-ncol: 2
#| par: true
#| echo: !expr knitr::is_html_output()
#| code-fold: true
# 准备 Noto 中英文字体
# sysfonts::font_add_google(name = "Noto Sans", family = "Noto Sans")
# sysfonts::font_add_google(name = "Noto Serif SC", family = "Noto Serif CJK SC")
# 在 Base R 图形中使用 Noto 字体
plot(pressure, type = "b", pch = 19, ann = FALSE, family = "Noto Sans")
title(xlab = "温度", ylab = "压力", family = "Noto Serif CJK SC")
# 在 ggplot2 图形中使用 Noto 字体
library(ggplot2)
ggplot(data = pressure, aes(x = temperature, y = pressure)) +
geom_line() +
geom_point(size = 2) +
labs(x = "温度", y = "压力") +
scale_x_continuous(breaks = seq(0, 400, by = 50)) +
theme_bw(base_size = 13) +
theme(
axis.title = element_text(family = "Noto Serif CJK SC"),
axis.title.x = element_text(
margin = margin(b = 0, l = 0, t = 20, r = 0)
),
axis.title.y = element_text(
margin = margin(b = 0, l = 0, t = 0, r = 20)
),
panel.border = element_rect(color = "black"),
panel.grid = element_blank(),
axis.ticks.length = unit(0.25, "cm"),
axis.text.x = element_text(
family = "Noto Sans", color = "black",
vjust = -1.5, size = rel(1.25)
),
axis.text.y = element_text(
family = "Noto Sans", color = "black",
angle = 90, vjust = 1.5, hjust = 0.5,
size = rel(1.25)
)
)
```
@fig-xkcd-fonts 是一幅手绘漫画风格的图形,展示了三种不同鸢尾花的萼片宽度和长度的关系。
```{r}
#| label: fig-xkcd-fonts
#| fig-cap: "手绘漫画风格的图形"
#| fig-width: 5
#| fig-height: 3
#| fig-showtext: true
#| echo: !expr knitr::is_html_output()
#| code-fold: true
# brew tap homebrew/cask-fonts
# brew install --cask font-xkcd
if (xfun::is_macos()) {
sysfonts::font_add("xkcd", regular = "xkcd.otf")
} else {
sysfonts::font_add("xkcd", regular = "xkcd.ttf")
}
ggplot(data = iris, aes(Sepal.Length, Sepal.Width)) +
geom_point(aes(color = Species, shape = Species)) +
scale_color_grey() +
theme_bw(base_size = 13, base_family = "xkcd") +
theme(
panel.border = element_rect(color = "black"),
panel.grid = element_blank()
)
```
如读者所见,本书不会局限于作图的工具,除了上面已经展示的 Base R 和 **ggplot2**,还会陆续用到 **lattice** [@Sarkar2008] 和 [**rgl**](https://github.com/dmurdoch/rgl) 包,甚至会超出 R 语言的范畴,介绍 LaTeX 世界里的 [TikZ](https://ctan.org/pkg/pgf) 和 JavaScript 中的 WebGL 等。
在掌握各类现代的绘图技术后,回归统计图形的落脚点,从数据传递的信息出发,选择合适的图形和实现工具,兼顾美观,到达「道」与「术」和谐统一的境界。
<!--
书中参考文献的样式一律遵守2015年国家颁布的《GB/T 7714-2015 信息与文献 参考文献著录规则》,全书使用作者年份引用格式,感谢胡振震开发的 [biblatex-gb7714-2015](https://github.com/hushidong/biblatex-gb7714-2015) 宏包,使参考文献的引用在 LaTeX 文档中变得更容易,解放了一部分排版编辑工作,让作者腾出时间专注于内容。
-->