第4章 双变量图
双变量图显示两个变量之间的关系。图表的类型取决于变量的测量级别(分类或定量)。
4.1 分类与分类
在绘制两个分类变量之间的关系时,通常使用堆叠,分组或分段条形图。一种不太常见的方法是镶嵌图
。
4.1.1 堆积条形图
让我们在燃油经济性数据集中绘制汽车类别和驾驶类型(前轮,后轮或四轮驱动)之间的关系。
library(tidyverse)
# stacked bar chart
mpg %>% ggplot() +
geom_bar(mapping = aes(class))
ggplot(mpg, aes(x = class, fill = drv, color = drv)) +
geom_bar(position = "stack")
图4.1:堆积条形图
从图表中我们可以看到,例如,最常见的车辆是SUV。所有2座车都是后轮驱动,而大多数,但不是所有的SUV都是4轮驱动。
Stacked
是默认值,因此最后一行也可以写为geom_bar()
。
4.1.2 分组条形图
要创建分组条形图,请使用该position = "dodge"选项。
# grouped bar plot
ggplot(mpg,
aes(x = class,
fill = drv)) +
geom_bar(position = "dodge")
图4.2:并排条形图
注意,所有的小型货车都是前轮驱动。默认情况下,零计数条将被删除
,其余的条将变宽。这可能不是你想要的行为。
您可以使用position = position_dodge(preserve = "single")
选项来修改它。
# grouped bar plot preserving zero count bars
ggplot(mpg,
aes(x = class,
fill = drv)) +
geom_bar(position = position_dodge(preserve = "single"))
图4.3:保留零计数条的并列条形图
注意,这个选项只在最新的ggplot2开发版本中可用,但是应该很快就可以使用。
4.1.3 分段条形图
分段条形图是一个堆叠的条形图,其中每个条形图表示100%
。您可以使用position = "filled"
选项创建分段条形图。
# bar plot, with each bar representing 100%
ggplot(mpg,
aes(x = class,
fill = drv)) +
geom_bar(position = "fill") +
labs(y = "Proportion")
图4.4:分段条形图
如果目标是比较一个变量中的类别在另一个变量的每个级别上的百分比
,则此类型的绘图特别有用。
例如,当您从紧凑型车,中型车到小型货车时,前轮驱动车的比例会上升。
4.1.4 改善颜色和标签
您可以使用其他选项来改善颜色和标签。在下图中
factor
修改类变量的类别顺序以及驱动变量的顺序和标签scale_y_continuous
修改y轴刻度标记labs
提供标题并更改x和y轴
以及图例的标签scale_fill_brewer
更改填充颜色方案theme_minimal
删除灰色背景并更改网格颜色
# bar plot, with each bar representing 100%,
# reordered bars, and better labels and colors
library(scales)
mpg$drv %>% typeof()
ggplot(mpg,
aes(x = factor(class,
levels = c("2seater", "subcompact",
"compact", "midsize",
"minivan", "suv", "pickup")),
fill = drv)) +
geom_bar(position = "fill") +
scale_y_continuous(breaks = seq(0, 1, .2),
label = percent) +
scale_fill_brewer(palette = "Set2") +
labs(y = "Percent",
fill = "Drive Train",
x = "Class",
title = "Automobile Drive by Class") +
theme_minimal()
ggplot(mpg,
aes(x = factor(class,
levels = c("2seater", "subcompact",
"compact", "midsize",
"minivan", "suv", "pickup")),
fill = factor(drv,
levels = c("f", "r", "4"),
labels = c("front-wheel",
"rear-wheel",
"4-wheel")))) +
geom_bar(position = "fill") +
scale_y_continuous(breaks = seq(0, 1, .2),
label = percent) +
scale_fill_brewer(palette = "Set2") +
labs(y = "Percent",
fill = "Drive Train",
x = "Class",
title = "Automobile Drive by Class") +
theme_minimal()
图4.5:带有改进标签和颜色的分段条形图
在上图中,该factor函数用于重新排序和/或重命名分类变量的级别
。您也可以将其应用于原始数据集,使这些更改成为永久性的。然后它将应用于使用该数据集的所有未来图形。例如:
# change the order the levels for the categorical variable "class"
mpg$class = factor(mpg$class,
levels = c("2seater", "subcompact",
"compact", "midsize",
"minivan", "suv", "pickup"))
mpg %>% glimpse()
str(mpg)
将factor
函数放在ggplot函数中,以演示如果需要,可以更改单个图的类别和类别标签的顺序。
其他功能将在自定义图形一节中进行更全面的讨论。
接下来,让我们为每个部分添加百分比标签
。首先,我们将创建一个具有必要标签的摘要数据集。
# create a summary dataset
plotdata <- mpg %>%
group_by(class, drv) %>%
summarize(n = n()) %>%
mutate(pct = n/sum(n),
lbl = scales::percent(pct))
plotdata
接下来,我们将使用此数据集和geom_text
函数为每个条形段添加标签。
# create segmented bar chart
# adding labels to each segment
ggplot(plotdata,
aes(x = factor(class,
levels = c("2seater", "subcompact",
"compact", "midsize",