r - 如何在R中绘制具有多个分类变量的平行坐标

标签 r ggplot2 visualization categorical-data ggally

我在使用 ggparcoord 绘制平行坐标图时遇到了困难来自 GGally 包。由于有两个分类变量,我想在可视化中显示的内容如下图所示。我发现在 ggparcoord , groupColumn只允许 单个变量 分组(颜色),当然我可以使用 showPoints 来标记轴上的值,但我还需要根据分类变量改变这些标记的形状。是否有其他软件包可以帮助我实现我的想法?

任何回应将不胜感激!谢谢!

university and country are two categories

最佳答案

在 ggplot2 中滚动您自己的平行坐标图并不难,这将使您可以灵活地自定义美学。下面是使用内置 diamonds 的插图数据框。

要获得平行坐标,您需要添加 ID列,以便您可以识别数据框的每一行,我们将其用作 group ggplot 中的美学。您还需要scale数值,以便我们绘制它们时它们都在相同的垂直比例上。然后你需要在 x 轴上取所有你想要的列,并将它们 reshape 为“长”格式。我们使用 tidyverse/dplyr 即时完成所有操作管道运算符(operator)。

即使在限制了类别组合的数量之后,线条也可能过于交织,以至于该图难以解释,因此仅将其视为“概念证明”。希望您可以使用您的数据创建更有用的东西。我用过colour (对于线条)和fill (为要点)美学如下。您可以使用 shapelinetype相反,取决于您的需求。

library(tidyverse)
theme_set(theme_classic())

# Get 20 random rows from the diamonds data frame after limiting
#  to two levels each of cut and color
set.seed(2)
ds = diamonds %>% 
  filter(color %in% c("D","J"), cut %in% c("Good", "Premium")) %>%
  sample_n(20)

ggplot(ds %>% 
         mutate(ID = 1:n()) %>%             # Add ID for each row
         mutate_if(is.numeric, scale) %>%   # Scale numeric columns
         gather(key, value, c(1,5:10)),     # Reshape to "long" format
       aes(key, value, group=ID, colour=color, fill=cut)) +
  geom_line() +
  geom_point(size=2, shape=21, colour="grey50") +
  scale_fill_manual(values=c("black","white"))

enter image description here

我没用过ggparcoords之前,但唯一看起来简单的选项(至少在我第一次尝试使用该函数时)是将两列数据粘贴在一起。下面是一个例子。即使只有四个类别组合,该图也令人困惑,但如果您的数据中有很强的模式,它可能是可以解释的:
library(GGally)

ds$group = with(ds, paste(cut, color, sep="-"))

ggparcoord(ds, columns=c(1, 5:10), groupColumn=11) +
  theme(panel.grid.major.x=element_line(colour="grey70"))

enter image description here

关于r - 如何在R中绘制具有多个分类变量的平行坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44351127/

相关文章:

python - python 中的图形图上有很多边

python - 如何在 PLOTLY 直方图中将 x 轴更改为对数

python - 奇怪的饼图被截断

r - sas7bdat 日期格式转R 日期格式

r:在 ggplot2 中绘制带孔的多边形时撕裂

r - ggplot 和 dplyr 以及列名作为字符串

在 geom_tile 的颜色条指南上调整大小/手动输入中断并替换 y 轴标签

r - ggplot2 - 用一列绘制 Y 轴但从另一列标记

r - kmeans 提示 "NA/NaN/Inf in foreign function call (arg 1)",什么时候没有?

r - 如何在 Shiny 的应用程序中对桑基图中的源和/或目标节点进行排序?