【发布时间】:2020-02-05 01:55:24
【问题描述】:
使用 iris 数据集,我可以制作如下平行坐标图。
library(GGally)
ggparcoord(data=iris,columns = (2:4),groupColumn = "Species")
我还想在同一个图上绘制每种花卉的每个变量的平均值。我该怎么做?
我曾想过用平均值制作一个新的数据框,但这似乎真的很不雅。
【问题讨论】:
使用 iris 数据集,我可以制作如下平行坐标图。
library(GGally)
ggparcoord(data=iris,columns = (2:4),groupColumn = "Species")
我还想在同一个图上绘制每种花卉的每个变量的平均值。我该怎么做?
我曾想过用平均值制作一个新的数据框,但这似乎真的很不雅。
【问题讨论】:
我认为这里需要使用方法创建一个额外的数据框,因为没有选项可以仅使用 ggparcoord 提供的参数来执行此操作。
使用 dplyr/tidyverse 准备数据框并绘图如下:
libary(dplyr)
scaled_means <- iris %>%
select(- Sepal.Length) %>%
# Need to scale in the same as ggparcoord is doing
mutate_at(vars(- Species), ~ scale(.)[, 1]) %>%
group_by(Species) %>%
summarize_all(mean) %>%
pivot_longer(- Species, names_to = "variable", values_to = "value")
ggparcoord(data=iris,columns = (2:4),groupColumn = "Species") +
geom_point(data = scaled_means, aes(x = variable, y = value, colour = Species),
size = 3,
inherit.aes = FALSE)
结果:
【讨论】:
scale() in base R 有点烦人,它以矩阵形式返回结果,因此[, 1] 将该列从矩阵中拉出并使其成为向量。我编写了代码以匹配ggparcoord 中的默认缩放比例,但如果您更改ggparcoord 缩放选项,则必须更改代码。