使用ggvanced包在R中绘制蜘蛛图和平行坐标图

一个用于有效可视化多个变量的 R 包

一张漂亮的蜘蛛图。图片由作者提供。

动机

在我的一个数据分析项目中,我发现自己需要一种有效的方法来比较多个变量中的组。当然,条形图首先想到了,但我想要更具吸引力的东西,更有趣的东西。在浏览网络一段时间后,我选定了两个主要候选人——蜘蛛图和平行坐标图。

在这之后,我通常只需要找一个专门用于生成所需可视化的 R 包,但这一次,这种方法让我一筹莫展。

这是个谎言——更有经验的 R 用户可能会说!这样的可视化已经可以使用像 fsmbggradar 用于雷达图以及 ggally 用于平行图的包来获取。

但是,除了仅执行组在变量上的排名比较之外,我还希望同时显示每个变量的值范围。你猜对了,上述包中没有一个提供这个功能。因此,我决定自己构建一个 🙂

ggvanced 包

ggvanced 是一个用于创建高级多变量图表(如蜘蛛/雷达图和平行坐标图)的 R 包。这些可视化是在 ggplot2 包的基础上创建的。 ggplot2 包的美妙之处在于图形的基础语法,允许通过在其上叠加多个层来创建图形。这个强大的概念让我们可以创建任何可视化,只要我们知道如何编码。

使用图形语法方法创建可视化。图片由作者提供。

该包目前可在 GitHub 上使用,并可通过在 R 中键入 devtools::install_github("Ringomed/ggvanced") 命令并在此后调用 library(ggvanced) 进行安装。

如果您对图表构建的细节感兴趣,最近的一篇文章中展示了从头开始构建蜘蛛图的逻辑,因此请查看下面的故事或 GitHub 上的详细文档。

如何使用 ggplot2 在 R 中制作蜘蛛图

蜘蛛/雷达图的逐步构建

towardsdatascience.com

对于其他人,以下是一些详细说明包函数可以做什么的示例。

使用 ggspider() 制作蜘蛛图

ggspider() 函数创建蜘蛛图,其中一个共享轴被缩放到 [0,1] 范围,或者为每个显示的类别显示实值的单独轴。让我们在几个示例上测试该函数。首先,我们必须格式化数据,使第一列包含组标识符,其他列包含描述性变量。我们将使用内置的 mtcarsiris 数据集。

library(tidyverse)mtcars_summary <- mtcars %>%   tibble::rownames_to_column(var = "group") %>%    tibble::as_tibble() %>%   tail(3)iris_summary <- iris %>%   dplyr::group_by(Species) %>%   dplyr::summarise(across(everything(), mean))library(ggvanced)

比较汽车属性

ggspider(mtcars_summary)
作者提供的图片。

汽车之间的主要差异立即显现出来。正如预期的那样,与法拉利和玛莎拉蒂等赛车相比,沃尔沃的马力(hp)要少得多,覆盖四分之一英里(qsec)的时间也要长得多,但在每加仑英里数(mpg)方面更加经济。

可视化鸢尾属植物物种之间的差异

ggspider(iris_summary)
作者提供的图片。

就像汽车示例一样,蜘蛛图非常有效地确定了鸢尾属植物物种之间的差异。我们可以立即看出,变色鸢尾和维吉尼亚鸢尾物种更相似,其花瓣和萼片长度和宽度的比率基本相同,仅在总花大小方面有所不同。相反,山鸢尾物种的萼片宽度要大得多。

雷达图表

该函数还允许通过指定参数 scaled = TRUE 并使用 polygon = FALSE 切换到圆形来创建传统的雷达图表,该图表具有单个公共缩放轴。

ggspider(iris_summary, scaled = TRUE, polygon = FALSE)

其他函数参数更多地涉及美学方面,涵盖字体大小、标签位置等方面。有关更多详细信息,请参阅函数文档。

使用 ggparallel() 创建并行图表

尽管我更喜欢蜘蛛图从美学角度来看,但并行图表可以更容易地发现变量之间的趋势。特别是当数据集中有许多变量或观测值时,这一点尤为明显。

ggparallel(mtcars_summary)
作者提供的图片。
ggparallel(iris_summary)
作者提供的图片。

美学方面的变化

上面的图表只是裸体版本。当然,它们可以像任何其他 ggplot2 图表一样被“装饰起来”。下面是一些修改后的 ggvanced 蜘蛛图的示例。

作者提供的图片。

当然,伴随的代码。享受吧! 🙂

library(tidyverse)library(ggvanced)library(sysfonts)library(showtext)sysfonts::font_add_google("Roboto Condensed")showtext_auto()mtcars_gr <- mtcars %>%  tibble::rownames_to_column(var = "group") %>%  tibble::as_tibble() %>%  tail(3) %>%  rename("每加仑英里数" = mpg, "气缸" = cyl,         "排量" = disp, "马力" = hp,         "后桥\n比" = drat, "重量" = wt) %>%  dplyr::select(1:7)ggspider(mtcars_gr, axis_name_offset = 0.15, background_color = "beige", fill_opacity = 0.15) +  labs(col = "汽车名称", title = "比较汽车属性") +  theme(plot.title = element_text(hjust = 0.475, face = "bold"),        legend.title = element_text(face = "bold"),        text = element_text(family = "Roboto Condensed", face = "bold"))

结论

在这篇文章中,我介绍了 ggvanced 的关键功能和选项——这是我为了满足在 R 中需要更高级的蜘蛛图和并行图而制作的一个包。

文章中介绍了每个功能的几个示例,并展示了在进行一些额外的自定义后最终结果可能会是什么样子。

我希望这个包对你有用,就像对我一样。如果你希望在 R 中实现更多自定义可视化效果,请留言,我会尽力为您创建一个单独的函数。 🙂