Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中绘制具有多个分类变量的平行坐标_R_Ggplot2_Visualization_Categorical Data_Ggally - Fatal编程技术网

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

如何在R中绘制具有多个分类变量的平行坐标,r,ggplot2,visualization,categorical-data,ggally,R,Ggplot2,Visualization,Categorical Data,Ggally,使用GGALY软件包中的ggparcoord绘制平行坐标图时,我遇到了一个困难。由于有两个分类变量,我想在可视化中展示的是下图。我发现在ggparcoord中,groupColumn只允许单个变量来分组(颜色),当然我可以使用显示点来标记轴上的值,但我还需要根据分类变量改变这些标记的形状。有没有其他方案可以帮助我实现我的想法 任何回复都将不胜感激!谢谢 在ggplot2中滚动您自己的平行坐标绘图并不困难,这将为您提供定制美学的灵活性。下面是使用内置菱形数据框的图示 要获得平行坐标,您需要添加一个

使用GGALY软件包中的
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轴的比例都不同。可能吗?你发布的内容比答案更好,因为它显示了每个坐标的范围,而不仅仅是标准范围。。。