使用 ggplot2 进行数据可视化

使用 ggplot2 进行数据可视化

这是《R 数据科学》系列课程的第二讲:数据可视化。本讲将会简要介绍 ggplot2 的基本用法。通过本次课的学习,你将能使用 ggplot2 绘制各种常见的统计图表。一起来学习吧!

视频讲解(预览)

之所以要学习 ggplot2,是因为它真的比 R 语言的基础绘图系统更容易使用且绘制出的图形更美观。ggplot2 基于 grammar of graphics 进行构图,大致可以理解为,使用 ggplot2 绘图的时候,图表是一层层绘制的。这种绘图方式的好处就在于你可以一层层的添加图层拓展你的图表。

准备工作

1
2
library(tidyverse)
library(ggplot2)

为了方便 Stata 用户学习,下面我将使用 auto.dta 数据演示 ggplot2 的使用:

1
2
3
haven::read_dta('auto.dta') -> auto
auto
attributes(auto$make)

创建一个 ggplot2 图表

1
2
ggplot(data = auto) + 
geom_point(mapping = aes(x = weight, y = price))

美学映射

上面的示例仅仅创建了 x 和 y 的映射,实际上我们可以创建样式丰富的映射,例如说,我们使用散点的大小来表示另外一个变量 rep78,这个变量是 1978 年该汽车的维修次数:

1
2
ggplot(data = auto) + 
geom_point(mapping = aes(x = weight, y = price, size = rep78))

使用散点颜色也行:

1
2
ggplot(data = auto) + 
geom_point(mapping = aes(x = weight, y = price, color = rep78))

更多映射的设定可以阅读 ?geom_point 查看。

除了映射之外,我们还可以对图层的某个属性值进行设定,例如设定散点的颜色为 “blue”:

1
2
ggplot(data = auto) + 
geom_point(mapping = aes(x = weight, y = price), color = "blue")

ggplot2 支持样式丰富的散点,我们可以画个图展示下:

1
2
3
4
5
6
7
8
9
library(tidyr)
tibble(crossing(x = 1:5, y = 1:5), shape = 0:24) %>%
ggplot() +
geom_point(aes(x, y, shape = I(shape), size = 2)) +
theme(axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
legend.position = "none")

思考:

  1. 下面的代码绘制的散点为什么不是蓝色的?
1
2
ggplot(data = auto) + 
geom_point(mapping = aes(x = weight, y = price, color = "blue"))
  1. stroke 对应散点的什么属性?
1
2
ggplot(data = subset(auto, !is.na(rep78))) + 
geom_point(mapping = aes(x = weight, y = price, stroke = rep78), shape = 1)

可以比较它和 size 参数:

1
2
ggplot(data = subset(auto, !is.na(rep78))) + 
geom_point(mapping = aes(x = weight, y = price, size = rep78), shape = 1)

分面

分面也就是说我们使用一个数据集,根据某个变量进行拆分,每个子数据集绘制一个小图再组合,通常使用 facet_wrap()facet_grid() 实现。

  1. facet_wrap:
1
2
3
ggplot(auto) + 
geom_point(aes(weight, price), shape = 1) +
facet_wrap(~foreign, nrow = 1)
1
2
3
4
5
6
7
auto %>% 
mutate(foreign = factor(foreign,
levels = 0:1,
labels = c("国产车", "进口车"))) %>%
ggplot() +
geom_point(aes(weight, price), shape = 1) +
facet_wrap(~foreign, nrow = 1)

还可以多个变量进行组合:

1
2
3
4
5
6
7
auto %>% 
mutate(foreign = factor(foreign,
levels = 0:1,
labels = c("国产车", "进口车"))) %>%
ggplot() +
geom_point(aes(weight, price), shape = 1) +
facet_wrap(foreign ~ rep78, nrow = 4)

因为 facet_wrap 在创建分面图的时候各个图之间都要有空隙,所以就导致了上面的结果,对于这种情况,可以使用 facet_grid:

  1. facet_grid:
1
2
3
4
5
6
7
auto %>% 
mutate(foreign = factor(foreign,
levels = 0:1,
labels = c("国产车", "进口车"))) %>%
ggplot() +
geom_point(aes(weight, price), shape = 1) +
facet_grid(foreign ~ rep78)

中间的部分去哪了?

完整的讲义材料可以在加入我的知识星球(线上培训班)后从知识星球下载附件获取~
要了解如何加入,可以阅读关于界面或者添加我的微信咨询。

理解 ggplot2 的构图过程

这部分就直播的时候直接演示了。

今天的内容就到这里了~

建议大家学习本课之后再学习下:全国人大代表数据分析与可视化

知识星球附件链接:https://t.zsxq.com/bmUnE2b

#

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×