如何在R中绘制具有多个分类变量的平行坐标
使用GGALY软件包中的如何在R中绘制具有多个分类变量的平行坐标,r,ggplot2,visualization,categorical-data,ggally,R,Ggplot2,Visualization,Categorical Data,Ggally,使用GGALY软件包中的ggparcoord绘制平行坐标图时,我遇到了一个困难。由于有两个分类变量,我想在可视化中展示的是下图。我发现在ggparcoord中,groupColumn只允许单个变量来分组(颜色),当然我可以使用显示点来标记轴上的值,但我还需要根据分类变量改变这些标记的形状。有没有其他方案可以帮助我实现我的想法 任何回复都将不胜感激!谢谢 在ggplot2中滚动您自己的平行坐标绘图并不困难,这将为您提供定制美学的灵活性。下面是使用内置菱形数据框的图示 要获得平行坐标,您需要添加一个
ggparcoord
绘制平行坐标图时,我遇到了一个困难。由于有两个分类变量,我想在可视化中展示的是下图。我发现在ggparcoord
中,groupColumn
只允许单个变量来分组(颜色),当然我可以使用显示点来标记轴上的值,但我还需要根据分类变量改变这些标记的形状。有没有其他方案可以帮助我实现我的想法
任何回复都将不胜感激!谢谢
在ggplot2中滚动您自己的平行坐标绘图并不困难,这将为您提供定制美学的灵活性。下面是使用内置
菱形
数据框的图示
要获得平行坐标,您需要添加一个ID
列,以便识别数据帧的每一行,我们将在ggplot中将其用作组。您还需要缩放
数值,以便在绘制它们时,它们都处于相同的垂直比例上。然后,您需要在x轴上获取所需的所有列,并将它们重塑为“长”格式。我们使用tidyverse/dplyr
pipe操作符在下面动态地完成所有这些操作
即使在限制了类别组合的数量之后,这些线也可能被纠缠在一起,因此很容易解释,所以这仅仅是一个“概念证明”。希望您能用数据创建更有用的东西。我使用了颜色
(用于线条)和填充
(用于要点)美学。您可以根据需要使用形状
或线型
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"))
谢谢你的帮助。在将我的数据转换成非常短的长格式后,我使用ggplot2来绘制带有多个分类变量的平行坐标,而不是使用GGally……但问题是我无法缩放这些y轴。实际上,在我的绘图中只有一个y轴,但在我更改主题网格后,我使绘图看起来像有多个y轴。。。我真正想要的是,我可以缩放所有的y轴,使绘图更具可读性,就像我在问题中附加的图像,每个y轴的比例都不同。可能吗?你发布的内容比答案更好,因为它显示了每个坐标的范围,而不仅仅是标准范围。。。