WalterWang认为,运行示例程序并修改参数是学习编程的一种高效方式。这种实践中学习的方法不仅可以帮助理解程序的基本结构和语法,还能加深对程序如何响应不同输入的理解。通过实际操作,编程新手能直观地看到代码更改后的效果,从而深入理解程序的运作原理。因而本书以示例为核心。
使用 ggplot2 的关键组件包括:
1,数据(data), 2,一组美学映射,这组映射定义了数据中的变量与视觉属性之间的关系, 3,至少一个层,描述如何渲染每个观测值。层通常通过几何函数(geom function)来创建。
另外WalterWang提醒大家注意,ggplot2只能绘制二维图形。下面我们来绘制第一幅图。
第一幅图
library(ggplot2)
ggplot(data = mtcars, aes(x = wt, y = mpg)) +
geom_point()
我们可以看到我们有三个组件: 数据:mtcars 美学映射:wt 映射到 x 位置,mpg 映射到 y 位置。 层:点。
这里我们用了mtcars数据集,这是 R 语言中一个经典的数据集,它包含了 1973-1974 年间 32 辆汽车的各种规格和性能指标。这个数据集通常用于统计分析和数据可视化的示例教程中,因为它的结构清晰,而且包含多种类型的数据。
数据集中的变量包括:
- mpg: 汽车每加仑燃油能行驶的英里数(英里/加仑)
- cyl: 汽车的气缸数
- disp: 发动机的排量(立方厘米)
- hp: 发动机的马力
- drat: 后桥比率
- wt: 汽车的重量(千克)
- qsec: 汽车完成四分之一英里加速的时间(秒)
- vs: 发动机的形状(V型或直列)
- am: 变速器类型(自动 = 0,手动 = 1)
- gear: 前进档数
- carb: 汽化器的数量
在本书中,我们不对数据进行分析。只是来学习如何做图,所以有的图可能没有意义。所以大家对这个数据集可以不不求甚解。
缺省
ggplot()中第一个未命名参数是数据。传递给 aes() 的两个未命名参数将被映射到 x 和 y。这意味着以下代码与上面的示例是相同的:
ggplot(mtcars, aes(wt, mpg)) +
geom_point()
ggplot(mtcars, aes(y = mpg, x = wt)) +
geom_point()
理解数据集应用的基本逻辑
大家可以运行以下程序去理解应用数据集的逻辑。如果不给geom_point() 指明数据集时,geom_point()用ggplot()中指定的数据集
ggplot(mtcars) +
geom_point(aes(x = wt, y = mpg))
ggplot(mtcars) + geom_point(aes(x = wt, y = mpg)) + geom_point(aes(x = wt/4, y = mpg/4))
ggplot(data = NULL) + geom_point(aes(x = mtcars$wt, y = mtcars$mpg))
我们可以使用来自两个不同数据集的数据。
temp <- mtcars
ggplot(data = NULL) + geom_point(aes(x = mtcars$wt, y = mtcars$mpg)) + geom_point(aes(x = temp$wt/4, y = temp$mpg/4))
WalterWang建议你尝试运行以下代码并进行比较。
ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point() + geom_point(aes(x = temp$wt/4, y = temp$mpg/4))
理解 ggplot 是一个对象
p <- ggplot(data = mtcars, aes(x = wt, y = mpg))
p
p_base <- p + geom_point()
p_base
p1 <- p_base + geom_point(aes(x = temp$wt/4, y = temp$mpg/4))
p1
由于 ggplot 是一个对象,你可以打印、保存和总结它。
print(p_base)
ggsave("p_base.png", p_base , width = 6, height = 6)
summary(p_base)
## data: mpg, cyl, disp, hp, drat, wt, qsec, vs, am, gear, carb [32x11]
## mapping: x = ~wt, y = ~mpg
## faceting: <ggproto object: Class FacetNull, Facet, gg>
## compute_layout: function
## draw_back: function
## draw_front: function
## draw_labels: function
## draw_panels: function
## finish_data: function
## init_scales: function
## map_data: function
## params: list
## setup_data: function
## setup_params: function
## shrink: TRUE
## train_scales: function
## vars: function
## super: <ggproto object: Class FacetNull, Facet, gg>
## -----------------------------------
## geom_point: na.rm = FALSE
## stat_identity: na.rm = FALSE
## position_identity
在一个图中包括多个小图
我们首先介绍这一点,以便于比较不同的图表。我们需要一个新的包 ggpubr。
library(ggpubr)
p1 <- p_base + geom_point(aes(x = temp$wt/4, y = temp$mpg/4))
ggarrange(p_base, p1, ncol = 2, nrow = 1, widths = c(1, 1), heights = 0.5)
在以后的章节中,我们都先运行以下这几行程序。
library(ggplot2)
library(ggpubr)
library(ggtext) #用于个性化图表
library(dplyr) #用于数据处理
p_base <- ggplot(data = mtcars, aes(x = wt, y = mpg)) + geom_point()