DATA2002 Communicating with Data in the Tidyverse
前言
本章介绍了如何使用 ggplot2 主题里的功能制作出高质量的图形,也介绍了 tidyverse 里使用RMarkdown 和 CSS生成好看精美的自定义式报告。
小编尽最大努力,将抽象的代码知识,用通俗易懂的语言表示出来,让你们更轻松的学到coding!
时间紧,任务重,可能会出现一些错误。如果你有一双火眼金睛,请你找出他们!私信我或者在文章下面评论。如果你觉得有更好的方法去讲某个知识点,也可以私信或者评论。我很乐意接受你们的意见和想法。
下载链接(待更新)
最近小编任务量有点大,我会尽快补齐。请谅解!
1 自定义 ggplot2 主题 (Custom ggplot2 themes)
在这单元,您将先了解数据之间的关系,然后探索可视化报告
1.1 开发数据
1.1.1 连接两个数据集
在dplyr包中,可以通过 inner_join()
函数,连接两个数据集。
RDocument:inner_join()
tidyverse Cheat Sheet :tidyverse备忘单
inner_join(x , y , by = NULL , on = NULL)
1.1.2 过滤数据
在dplyr包中,可以使用 filter()
函数,过滤一些不想要的数据。其中,在 filter()
函数中可以添加 %in%
来识别元素(例如,数字)是否属于向量或数据帧。
link1:How to use %in% in R: 7 Example Uses of the Operator
link2:filter: Return rows with matching conditions
> x<-data.frame(id=1:6,
+ name=c("wang","zhang","li","chen","zhao","song"),
+ shuxue=c(89,85,68,79,96,53),
+ yuwen=c(77,68,86,87,92,63))
> x
id name shuxue yuwen
1 1 wang 89 77
2 2 zhang 85 68
3 3 li 68 86
4 4 chen 79 87
5 5 zhao 96 92
6 6 song 53 63)
> filter(x,name=="zhang")
id name shuxue yuwen
1 2 zhang 85 68
> a <- seq(1, 5)
> b <- seq(3, 12)
>
> a %in% b
[1] FALSE FALSE TRUE TRUE TRUE
1.1.3 统计汇总数据
在dplyr 包中,我们可以使用 group_by()
和 summarize()
汇总统计数据。
小Tips:
1. 记住是 summarize()
函数而不是 summarise()
函数
2. group_by()
为分组函数,是如果我们添加了 group_by()
函数后,我们可以理解为电脑自动给我们的数据进行了按照我们指定的列进行了分组整合,该函数通常和 summarize()
函数合在一起使用,也可以和 filter()
, select()
函数合在一起使用。
link1: group_by: Group by one or more variables
link2: summarize()
group_by(.data, ..., add = FALSE)
> library(dplyr)
> x<-data.frame(id=1:6,
+ name=c("wang","zhang","li","chen","zhao","song"),
+ shuxue=c(89,85,68,79,96,53),
+ yuwen=c(77,68,86,87,92,63))
> x
id name shuxue yuwen
1 1 wang 89 77
2 2 zhang 85 68
3 3 li 68 86
4 4 chen 79 87
5 5 zhao 96 92
6 6 song 53 63
> summarise(x,sum(shuxue))
sum(shuxue)
1 470
> summarise(group_by(x,name),sum(shuxue))
# A tibble: 6 × 2
name `sum(shuxue)`
<chr> <dbl>
1 chen 79
2 li 68
3 song 53
4 wang 89
5 zhang 85
6 zhao 96
1.2 绘制基本散点图
通过以上数据的基本处理,我们能得到想要的数据,下面就是激动人心的绘图了。
在ggplot2 包里,可以使用geom_point()
来绘制基本散点图。
link: geom_point()
ggplot(数据) +
geom_point()
1.2.1 绘图添加标签
在绘图中,可以添加标签来增加美观和增强可视化图片的可读性。
可以使用 labs()
函数添加不同的标签。
link: labs: Modify axis, legend, and plot labels
ggplot() +
geom_point() +
labs(x = aaaaaa ,
y = bbbbbb ,
title = cccccc ,
subtitle = dddddd ,
caption = eeeeee)
1.3 ggplot 主题
在ggplot2 中有一些独特的主题可以使用,这可以让你的可视化变得非常漂亮。
link: theme
我使用最小的主题作为例子。
ggplot() +
geom_point() +
theme_minimal()
上面的是 theme_minimal()
效果,下面是系统自动生成的效果。
1.3.1 自定义theme生成
除了系统格式之外,还可以自定义 theme()
更改绘图的不同样式属性来调整绘图。
link: Modify components of a theme
例子:
ggplot()+
geom_point() +
theme_minimal() +
theme(
text = element_text(family = "Bookman") ,
title = element_text(color = "blue") ,
plot.caption = element_text(color = "red") ,
plot.subtitle = element_text(size = 11))
# 更多参数用法请参考上面的link
2 创建自定义和独特的可视化 (Creating a custom and unique visualization)
条形图、散点图和直方图可能是最常见和最有效的数据可视化。然而,有时,甚至有更好的方法可以直观地突出您想要与观众交流的发现。所谓的“点图”让我们更好地掌握和理解数据的变化:例如,随着时间的推移而发展。在本章中,您将构建一个自定义且独特的可视化,以强调和解释您想要讲述的故事的一个方面。
2.1 在plot里添加情节
在 ggplot 中可以使用 facet_grid()
添加一些分面。
link: Lay out panels in a grid
library("ggplot2")
p1 <- ggplot(iris, aes(x =Species , y = Sepal.Length))+
geom_point()
p1 + facet_grid(. ~Species )
2.2 定义自己的主题功能
可以通过 function()
函数自定义theme主题。
例子:在 theme_minimal()
主题上添加更多的细节内容。
library("ggplot2")
my_theme <- function(){
theme_minimal() +
theme(
text = element_text(color = "gray25"),
plot.subtitle = element_text(size = 9),
plot.title = element_text(size = 18)
)
}
p1 <- ggplot(iris, aes(x =Species , y = Sepal.Length))+
geom_point() +
my_theme() +
labs(title = "aaaaa",
subtitle = "bbbbb")
p1
2.3 连接观察
在 ggplot 中 我们可以使用 geom_path()
函数创建点图的基本结构。
link: Connect observations
ggplot(iris) +
geom_path(aes(x = Sepal.Length , y = Species))
2.3.1 在线条上添加剪头
很多时候需要再图片的线条上添加剪头,来表示方向。我们可以使用 arrow()
函数,有两个参数 length
和 type
。
link: arrow: Describe arrows to add to a line.
ggplot(iris) +
geom_path(aes(x = Sepal.Length , y = Species),
arrow = arrow(length = unit(3 ,'mm'),
type = "closed"))
3 介绍Rmarkdown (Introduction to RMarkdown)
过去,研究人员和数据分析师过去常常在 R 中生成绘图,然后繁琐地将它们复制到他们的 LaTeX 或 Word 文档中。如今,可以使用 RMarkdown 语言从 R 和 RStudio 中生成和复制整个报告——结合 R 块、格式化散文、表格和情节。在本章中,您将获得以前的发现、结果和图形,并将它们整合到这样的报告中,以讲述需要讲述的故事。
3.1 文档的结构
在做RMarkdown时,首先要确定文档的结构。
小Tip: 请注意,在表示标题和文本的符号之间包含一个空格是一个好习惯!这使您的 Markdown 语法保持良好和可读性。
---
title: "aaaaaaaaa"
subtitle: "bbbbbbbbbbb"
author: "ccccccccccc"
output: "ddddddddddd"
---
3.2 文档分级
在报告中要生成不同的级别目录,可以使用 #
, ##
, ###
…
# 这是一级
## 这是二级
### 藏式三级
3.3 更改格式
在Rmarkdown中有很多的格式选项,粗体 **aaaaa**
, 斜体 *bbbbb*
。
**这是粗体**
*这是斜体*
3.4 代码块
在R中添加代码块是非常重要的一部分,我们可以使用以下方法:
4 自定义您的 RMarkdown 报告 (Customizing your RMarkdown report)
您的老板、您的客户或您的教授通常希望您的结果准确并以清晰简洁的结构呈现。但是,在此基础上提供格式良好且独特的报告肯定是一个加分项,并且可以自定义 RMarkdown 来实现此目的。
4.1 更改整体报告外观
在YAML标头中,可以指定自定义主题改变外观
---
title: "aaaaaaaaa"
subtitle: "bbbbbbbbbbb"
author: "ccccccccccc"
output:
html_document:
theme: cosmo
lighlight: monochrome
---
4.2 添加目录
RMarkdown 报告(无论是 HTML 还是 PDF)的另一个很酷的功能是自动生成的目录 (TOC)。通过多种设置,您可以自定义您的 TOC:
添加toc目录:toc : true
,设置跟随一起浮动:toc_float: true
,设置深度: toc_depth : 4
---
title: "aaaaaaaaa"
subtitle: "bbbbbbbbbbb"
author: "ccccccccccc"
output:
html_document:
toc: true
toc_float: true
toc_depth: 4
---
小结
part3和part4的部分不是重点,所以讲的不是很细致,更多内容细节的在Google里搜索就行,不是什么难点知识。后期会单独拿出来一章节讲这个知识点。
代码部分多多练习,多花费时间了解一下,也要多实践。
下一部分会更新Module1 的几个test内容和基础的R代码知识。