繁体   English   中英

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

[英]How to plot parallel coordinates with multiple categorical variables in R

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

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

大学和国家是两类

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

要获取平行坐标,您需要添加一个ID列,以便标识数据框的每一行,我们将其用作ggplot中的group外观。 您还需要scale数字值,以便在绘制它们时它们都在相同的垂直比例上。 然后,您需要在x轴上获取所有想要的列,并将它们整形为“长”格式。 我们可以使用tidyverse/dplyr管道运算符tidyverse/dplyr进行所有操作。

即使在限制类别组合的数量之后,这些线条也可能太缠结,以至于该图难以解释,因此,请仅将其视为“概念证明”。 希望您可以使用数据创建一些更有用的东西。 我在下面使用了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"))

在此处输入图片说明

我以前没有使用过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"))

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM