参考链接
https://github.com/gkaramanis/tidytuesday/tree/master/week-38
#######################################################################
学习到的技能(需要掌握的函数)
#######################################################################
filter() + mutate() + group_by() + arrange() + drop_na()
mutate()
函数中的case_when
来条件判断赋值,可以使用代码冗余复杂变得浅显易懂,也很方便进行修改lag()
函数表示取向量中的前一个数据lead()
函数表示取向量中的后一个数据- 最后记得先排序后操作,或者在函数中指定
order_by = xx
- 最后记得先排序后操作,或者在函数中指定
geom_segment()
函数expand
函数表示范围扩展常数矢量,用于在数据周围添加一些填充,以确保将其放置在距轴一定距离的位置。使用便捷函数expand_scale()
函数来生成expand
参数的值。默认值是将连续变量
的比例尺各扩大 5%,将离散变量
的比例尺各扩大 0.6 个单位。(翻译官方说明)expand_scale(mult = 0, add = 0)
- 一句话
add
表示图形距离画布左右两边的距离,mult
表示图形里画布上下两边的距离
rescale()
函数将数据范围归一化到 [0, 1]display.brewer.all()
就可以看到对应取色方案也可以在网站 Colormaps 进行查看
labs()
要善于利用此函数来加标题等注释theme_void()
去除所有内置主题here
包, 可以快速创建文件夹以及文件
#######################################################################
正文
#######################################################################
数据清洗
导入数据
1 | rm(list = ls()) |
整理数据
- 这里充分结合来了
filter() + mutate() + group_by() + arrange() + drop_na()
函数一套清洗 - 还有一点需要强调的是要善于利用
mutate()
函数中的case_when
来条件判断赋值,可以使用代码冗余复杂变得浅显易懂,也很方便进行修改 - 这里还需要注意的是利用了
lag()
函数,起到提取向量中的前一个值,后面会解释。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16pv_ch <- park_visits %>%
distinct(year, unit_name, unit_type, visitors) %>% # 去除重复行,类似base::uniq() 函数, 返回去除重复后的数据
filter(unit_type == "National Park" & year != "Total") %>% # 筛选数据类型为 `National Park` 和年份为 `非 Total` 的行
mutate(year = as.numeric(year)) %>% # 将 `year` 列由 `character` 变为 `numercic`
group_by(unit_name) %>% # 按照 `unit_name` 列变量进行分组
arrange(year, .by_group = TRUE) %>% # 将 `year` 年份按照分组分别进行排序
mutate(pct_change = (visitors/lag(visitors) - 1) * 100) %>% # 新建一列 `pct_change` lag() 向量中的 `前一个` 值
filter(unit_name != "Denali National Preserve") %>% # 将 `Denali National Preserve` 行去除
drop_na() %>% # 去除空值 `NA`
mutate( # 按照 `pct_change` 列的大小分组,三组
pct_change = case_when(
pct_change > 100 ~ 200,
pct_change < -100 ~ -200,
TRUE ~ pct_change # 表示除了上面的范围之内的范围都属于这个范畴
)
)
不得不插一句说明
lag()
和lead()
函数
- 官方说明书:https://dplyr.tidyverse.org/reference/lead-lag.html
lag()
函数表示取向量中的前一个数据lead()
函数表示取向量中的后一个数据- 最后记得先排序后操作,或者在函数中指定
order_by = xx
1 | lag(1:10, 1) |
可视化这部分思想很重要,
geom_segment()
函数用来绘制区域,即指定四个点的位置, 详情见 ggplot2 都有哪些使用不多但是却异常强大的图层函数 一文,反正我看完是受益匪浅。expand:
范围扩展常数矢量,用于在数据周围添加一些填充,以确保将其放置在距轴一定距离的位置。使用便捷函数
1 | ggplot(mpg, aes(displ, hwy)) + |
expand_scale()
来生成expand
参数的值。默认值是将连续变量
的比例尺各扩大 5%,将离散变量
的比例尺各扩大 0.6 个单位。(翻译官方说明)
expand_scale(mult = 0, add = 0)
mult:
范围扩展因子的向量。如果向量长度为 1,则刻度的下限和上限均会向外扩大。如果向量长度为 2,则下限由mult[1]
扩展,上限由mult[2]
扩展。add = c(0,1)
表示下边距离 x 轴零距离,距离顶端 1 倍长度。一般用于 y 轴,即scale_y_*
add:
可加范围扩展常数的向量。如果向量长度为 1,则通过添加单位向外扩展刻度的上下限。如果向量长度为 2,则下限由add[1]
扩展,上限由add[2]
扩展。add = c(0,1)
表示距离 y 轴零距离,距离右边 1 个单位。一般用于 x 轴,即scale_x_*
一句话
add
表示图形距离画布左右两边的距离,mult
表示图形里画布上下两边的距离
rescale()
- 将数据范围归一化到 [0, 1]
1
2
3
4
5rescale(1:10)
# [1] 0.0000000 0.1111111 0.2222222 0.3333333 0.4444444 0.5555556 0.6666667 0.7777778 0.8888889 1.0000000
rescale(1:11)
# [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
图中对应的颜色条
display.brewer.all()
就可以看到对应取色方案- 也可以在网站 Colormaps 进行查看
labs()
要善于利用此函数来加标题等注释
theme_void()
去除所有内置主题,具体一眼见 ggplot2 的主题模板
还得提一下的是
here
包, 可以快速创建文件夹以及文件
1 | here() |
1 | pv_ch %>% |