【问题标题】:Plot each row of data across all columns (Spaghetti plot)绘制所有列中的每一行数据(意大利面条图)
【发布时间】:2018-04-10 20:14:04
【问题描述】:

我有一个small dataset,由 16 行和 5 列组成。该数据集显示在图片下方,也可以使用以下方法导入到 R 中:

  d <- read.csv("https://raw.githubusercontent.com/izeh/i/master/De.csv")[-1]

目标:我的目标是绘制基数 R 中所有列(Spaghetti plot)中的每一行数据。例如,对于 3 行(总共 16行),我希望像下面的图片。

问题:我试过matplot()没有成功,有BASE R解决方案吗?

matplot(d)

全部数据:

   GolBkgnd DesnTst Result PrdctConc PostBrd
1         4       4      3         5       5
2         2       3      5         3       5
3         5       4      3         5       4
4         3       4      4         1       3
5         5       3      2         4       4
6         5       4      5         5       4
7         5       3      3         1       5
8         5       4      5         5       4
9         5       3      2         1       3
10        5       4      3         4       5
11        5       3      1         4       3
12        3       4      3         4       5
13        5       3      4         2       5
14        4       4      3         5       5
15        5       3      3         5       4
16        5       4      4         3       5

【问题讨论】:

    标签: r plot transpose


    【解决方案1】:

    使用base R,似乎您只需要使用t() 转置并自己绘制轴

    matplot(t(d), type="l", xaxt="n")
    axis(1, seq_along(d), names(d))
    

    【讨论】:

    • 是的。只是很多人在彼此之上。您可以使用matplot(t(d)+rnorm(nrow(d)*ncol(d)), type="l", xaxt="n")添加一些噪音来查看它
    【解决方案2】:

    这是使用tidyverse的解决方案

    library(tidyverse)
    
    d %>%
      mutate(index = 1:16) %>%
      gather(column, value) %>%
      ggplot(aes(column, value, color = index, group = index)) + 
      geom_lines()
    

    【讨论】:

    • 梅丽莎,感谢您的意见。我正在寻找 Base R 解决方案。
    【解决方案3】:

    您正在绘制所谓的“平行坐标图”。线条最终都相互重叠的事实让我建议使用抖动来随机地将它们稍微分开:

    library(MASS)
    png()
    parcoord( sapply(d, jitter))
    dev.off()
    

    MASS 包可以说是“基础”-R 包。如果你需要通过颜色来识别,那么":

    parcoord( sapply(d, jitter), col=1:16)
    

    【讨论】:

    • 您确定您不是在批评您接受的 matplot 解决方案吗?它的颜色默认使用 8 种颜色。
    • 如果我查看 colors()[1:16] 的输出,我明白您为什么不满意。您可以使用col=colors()[round(200 / 8*(1:16))] 尝试更大的颜色间隔,或者您可以阅读并点击?palette 上的链接
    猜你喜欢
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-04-15
    • 2021-10-21
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多