我在使用ggparcoord
GGally 包绘制平行坐标图时遇到了困难。由于有两个分类变量,我想在可视化中显示的内容如下图所示。我发现 in ggparcoord
,groupColumn
只允许对单个变量进行分组(颜色),当然我可以使用 showPoints 来标记轴上的值,但我还需要根据分类改变这些标记的形状变量。是否有其他软件包可以帮助我实现我的想法?
任何回应将不胜感激!谢谢!
我在使用ggparcoord
GGally 包绘制平行坐标图时遇到了困难。由于有两个分类变量,我想在可视化中显示的内容如下图所示。我发现 in ggparcoord
,groupColumn
只允许对单个变量进行分组(颜色),当然我可以使用 showPoints 来标记轴上的值,但我还需要根据分类改变这些标记的形状变量。是否有其他软件包可以帮助我实现我的想法?
任何回应将不胜感激!谢谢!
在 ggplot2 中滚动您自己的平行坐标图并不难,这将使您可以灵活地自定义美学。下面是使用内置diamonds
数据框的插图。
要获得平行坐标,您需要添加一ID
列,以便您可以识别数据框的每一行,我们将在 ggplot 中将其用作group
美学。您还需要scale
数值,以便在我们绘制它们时它们都在相同的垂直刻度上。然后你需要在 x 轴上取所有你想要的列,并将它们重塑为“长”格式。我们通过tidyverse/dplyr
管道操作员在下面即时完成所有这些工作。
即使在限制了类别组合的数量之后,线条也可能过于交织,以至于该图难以解释,因此仅将其视为“概念证明”。希望您可以使用您的数据创建更有用的东西。我在下面使用colour
了(用于线条)和fill
(用于点)美学。您可以使用shape
orlinetype
代替,具体取决于您的需要。
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"))