第15章 ggplot2基本介绍
15.1 眼见为实
尽管我们一直在强调用数据说话,但是有时统计数据并不能反映数据的全貌。下面我们来看迈阿密大学Alberto Cairo教授使用的一个经典例子。我们先来看这样一批数据,这些数据的统计结果如下。
# 加载包
library(tidyverse)
# 读取数据
df_plot <- read_csv("data/datasaurus.csv")
# 按dataset分类,计算x与y变量的均值和标准差
df_plot %>%
group_by(dataset) %>%
summarise(
x_mean = mean(x),
x_sd = sd(x),
y_mean = mean(y),
y_sd = sd(y)
)
## # A tibble: 13 × 5
## dataset x_mean x_sd y_mean y_sd
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 away 54.3 16.8 47.8 26.9
## 2 bullseye 54.3 16.8 47.8 26.9
## 3 circle 54.3 16.8 47.8 26.9
## 4 dino 54.3 16.8 47.8 26.9
## 5 dots 54.3 16.8 47.8 26.9
## 6 h_lines 54.3 16.8 47.8 26.9
## 7 high_lines 54.3 16.8 47.8 26.9
## 8 slant_down 54.3 16.8 47.8 26.9
## 9 slant_up 54.3 16.8 47.8 26.9
## 10 star 54.3 16.8 47.8 26.9
## 11 v_lines 54.3 16.8 47.8 26.9
## 12 wide_lines 54.3 16.8 47.8 26.9
## 13 x_shape 54.3 16.8 47.8 26.9
根据统计结果,我们可以发现,上面数据中各个dataset分类之间的x与y对应的均值和标准差都非常类似,那这是否意味着这些数据来自同一个群体呢?我们将各个dataset的数据画出来,可以得到下图。
我们可以看到,虽然各个dataset分类的均值和标准差类似,但是实际数据分布却千差万别。由此可见,数据可视化可以帮助我们更直观地了解数据的分布特征及数据间的相关性。
15.2 图形语法
ggplot2
是tidyverse
中进行数据可视化的常用包,其语法规则遵循图形语法(grammar of graphics)。基本思想是基于数据构建图形属性和统计转换的映射,将结果绘制在特定的坐标系中,有点类似绘画中图层堆叠的概念,示意图如下:
主要语法:
data
:指绘图的数据来源,格式为数据框,不支持向量和列表格式。
aes
:代表aesthetics
,指数据映射的图形属性,比如哪个变量映射到x轴,哪个映射到y轴,哪些则是形状、颜色、透明度等属性的映射,更多图样可参考此链接。
x
:指x轴方向的数据。
y
:指y轴方向的数据。
color
:指元素的颜色[小节15.3]。
fill
:指元素的填充设置。
size
/linewidth
:指元素的大小,size
用于点的大小设置,linewidth
用于线的粗细设置。
shape
:指元素的形状[小节15.4]。
alpha
:指元素的透明度,范围为0-1,0为完全透明,1为不透明。
geom_*
:代表geometric
,用于作图(如散点图、柱状图等)、绘制拟合曲线、添加线段箭头、添加标签等。
stat_*
:代表statistics
,指进行统计转换后再作图,比如制作包含均值和标准差的线图或者置信圈。
position_*
:用于调整图形元素的实际位置,比如柱状图的平行排列或者堆积。
facet_*
:用于制作分面图,即基于特定变量按照行或列的形式分别作图。当仅基于单个变量的多个水平做分面图时,建议使用facet_wrap()
函数。
coord_*
:用于坐标轴的转换,如翻转、饼图、对数转换等。
theme
:用于调整非数据部分(如标题颜色、字体、字号、前景色、背景色、网格、刻度角度)的格式。
labs
:用于添加标题、图注和坐标轴。参考链接。
scale_*
:用于修改默认设置,比如分类变量对应的颜色,坐标轴的刻度,坐标轴扩展调整和图例简易调整。
fill
生成的时候(如柱状图),需要选择scale_fill_*
调整图例。
color
生成的时候(如散点图和线图),需要选择scale_color_*
调整图例。
scale_*_continuous
调整。
scale_*_discrete
调整。
scale_*_manual
调整。
guides
:用于对图例、坐标轴刻度样式的精细调整。
ggsave()
:用于导出图像。
15.4 元素的形状
使用特定点的形状时,需声明shape=点形状对应的序号
。点的形状可参考此链接。我们也可以设定点的形状根据变量的值而改变,此时需声明shape=变量名称
。
使用特定线的类型时,需声明linetype=线类型的名称或对应的序号
。1对应”solid”,2对应”dashed”,依此类推。我们也可以设定线的类型根据变量的值而改变,此时需声明linetype=变量名称
。