使用ggvanced包在R中绘制蜘蛛图和平行坐标图
一个用于有效可视化多个变量的 R 包
动机
在我的一个数据分析项目中,我发现自己需要一种有效的方法来比较多个变量中的组。当然,条形图首先想到了,但我想要更具吸引力的东西,更有趣的东西。在浏览网络一段时间后,我选定了两个主要候选人——蜘蛛图和平行坐标图。
在这之后,我通常只需要找一个专门用于生成所需可视化的 R 包,但这一次,这种方法让我一筹莫展。
这是个谎言——更有经验的 R 用户可能会说!这样的可视化已经可以使用像 fsmb
和 ggradar
用于雷达图以及 ggally
用于平行图的包来获取。
但是,除了仅执行组在变量上的排名比较之外,我还希望同时显示每个变量的值范围。你猜对了,上述包中没有一个提供这个功能。因此,我决定自己构建一个 🙂
ggvanced 包
ggvanced
是一个用于创建高级多变量图表(如蜘蛛/雷达图和平行坐标图)的 R 包。这些可视化是在 ggplot2
包的基础上创建的。 ggplot2
包的美妙之处在于图形的基础语法,允许通过在其上叠加多个层来创建图形。这个强大的概念让我们可以创建任何可视化,只要我们知道如何编码。
该包目前可在 GitHub 上使用,并可通过在 R 中键入 devtools::install_github("Ringomed/ggvanced")
命令并在此后调用 library(ggvanced)
进行安装。
如果您对图表构建的细节感兴趣,最近的一篇文章中展示了从头开始构建蜘蛛图的逻辑,因此请查看下面的故事或 GitHub 上的详细文档。
如何使用 ggplot2 在 R 中制作蜘蛛图
蜘蛛/雷达图的逐步构建
towardsdatascience.com
对于其他人,以下是一些详细说明包函数可以做什么的示例。
使用 ggspider() 制作蜘蛛图
ggspider()
函数创建蜘蛛图,其中一个共享轴被缩放到 [0,1] 范围,或者为每个显示的类别显示实值的单独轴。让我们在几个示例上测试该函数。首先,我们必须格式化数据,使第一列包含组标识符,其他列包含描述性变量。我们将使用内置的 mtcars
和 iris
数据集。
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 中实现更多自定义可视化效果,请留言,我会尽力为您创建一个单独的函数。 🙂