【问题标题】:Adding a mean line for each variable on a parallel coordinates plot在平行坐标图上为每个变量添加一条平均线
【发布时间】:2020-02-05 01:55:24
【问题描述】:

使用 iris 数据集,我可以制作如下平行坐标图。

library(GGally)
ggparcoord(data=iris,columns = (2:4),groupColumn = "Species")

我还想在同一个图上绘制每种花卉的每个变量的平均值。我该怎么做?

我曾想过用平均值制作一个新的数据框,但这似乎真的很不雅。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我认为这里需要使用方法创建一个额外的数据框,因为没有选项可以仅使用 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(.)[, 1] 1 在这里做什么?这段代码是否总是根据 ggparcoord 中使用的 scale 方法来缩放均值?
    • scale() in base R 有点烦人,它以矩阵形式返回结果,因此[, 1] 将该列从矩阵中拉出并使其成为向量。我编写了代码以匹配ggparcoord 中的默认缩放比例,但如果您更改ggparcoord 缩放选项,则必须更改代码。
    猜你喜欢
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    相关资源
    最近更新 更多