我在使用GGally软件包中的ggparcoord
绘制平行坐标绘图时遇到困难。由于存在两个分类变量,我想在可视化中显示的内容如下图所示。我发现在ggparcoord
,groupColumn
只允许单个变量来组(颜色),当然我可以使用showPoints标记轴上的值,但我也需要改变形状这些标记根据分类变量。有没有其他的软件包可以帮助我实现我的想法?如何在R中绘制具有多个分类变量的平行坐标
任何回应将不胜感激!谢谢!
我在使用GGally软件包中的ggparcoord
绘制平行坐标绘图时遇到困难。由于存在两个分类变量,我想在可视化中显示的内容如下图所示。我发现在ggparcoord
,groupColumn
只允许单个变量来组(颜色),当然我可以使用showPoints标记轴上的值,但我也需要改变形状这些标记根据分类变量。有没有其他的软件包可以帮助我实现我的想法?如何在R中绘制具有多个分类变量的平行坐标
任何回应将不胜感激!谢谢!
这并不难推出自己的平行坐标GGPLOT2情节,这将让您灵活定制的美观。以下是使用内置的diamonds
数据框的图示。
要获得平行坐标,您需要添加一个ID
列,以便识别数据框的每一行,我们将在ggplot中将其用作group
审美。您还需要scale
这些数字值,以便在我们绘制它们时它们都处于相同的垂直比例。然后,您需要在x轴上采用所需的所有列,并将它们重新塑形为“长”格式。我们通过tidyverse/dplyr
管道运营商在飞行中完成所有这些工作。
即使在限制类别组合的数量之后,这些线条可能过于交织在一起,因此此图很容易解释,因此请考虑这仅仅是“概念验证”。希望你可以创建一些对你的数据更有用的东西。我已在下面使用colour
(用于线条)和fill
(用于点)美学。根据您的需要,您可以使用shape
或linetype
。
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"))
感谢您的帮助。我没有使用GGally,而是使用ggplot2在将我的数据转换为非常瘦的长格式后,绘制具有多个分类变量的平行坐标......但问题是我无法缩放这些y轴。实际上,在我的情节中只有一个y轴,但是在我改变主题网格之后,我让这个情节看起来像有多个y轴......我真正想要的是我可以缩放所有的“y轴”绘图更具可读性,就像我在每个Y轴的刻度变化的问题中附加的图像一样,可能吗? – Lexi
你贴什么比答案更好,因为它显示了每个坐标的范围,而不仅仅是标准化的范围... – Chris