4两变量图

本文深入探讨了使用ggplot2绘制双变量图的各种方法,包括分类与分类变量的堆积、分组和分段条形图,以及定量与定量变量的散点图和线图。同时,介绍了分类与定量变量关系的展示,如条形图、核密度图、箱线图和小提琴图等。每个图表类型都有详细的改进技巧,如调整颜色、标签和添加最佳拟合线,旨在提高数据可视化的效果和可理解性。
摘要由CSDN通过智能技术生成

第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", 
                            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值