2017-06-04 117 views
5

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

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

university and country are two categories

+0

你贴什么比答案更好,因为它显示了每个坐标的范围,而不仅仅是标准化的范围... – Chris

回答

1

这并不难推出自己的平行坐标GGPLOT2情节,这将让您灵活定制的美观。以下是使用内置的diamonds数据框的图示。

要获得平行坐标,您需要添加一个ID列,以便识别数据框的每一行,我们将在ggplot中将其用作group审美。您还需要scale这些数字值,以便在我们绘制它们时它们都处于相同的垂直比例。然后,您需要在x轴上采用所需的所有列,并将它们重新塑形为“长”格式。我们通过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")) 

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

+0

感谢您的帮助。我没有使用GGally,而是使用ggplot2在将我的数据转换为非常瘦的长格式后,绘制具有多个分类变量的平行坐标......但问题是我无法缩放这些y轴。实际上,在我的情节中只有一个y轴,但是在我改变主题网格之后,我让这个情节看起来像有多个y轴......我真正想要的是我可以缩放所有的“y轴”绘图更具可读性,就像我在每个Y轴的刻度变化的问题中附加的图像一样,可能吗? – Lexi

相关问题