【问题标题】:Plot multiple data sets by group with lines in R用 R 中的线按组绘制多个数据集
【发布时间】:2017-07-11 04:20:24
【问题描述】:

对于我在 SO 上找不到此问题的解决方案感到有些惊讶,但我已经尝试了我认为可能适用的每个搜索词。但是,我可能没有使用正确的搜索词,如果这是重复的,请原谅我,请指出正确的方向。我有按样本分组的数据,每个样本对每个类别都有一个值,其中有很多。这是一个示例数据框(注意样本数和类别数通常不同):

df <- data.frame( sample = c( "one", "two", "three", "four" ), 
  cat_1 = c( 2, 4, -6, 2 ), cat_2 = c( 1, 2, 2, 1 ), 
  cat_3 = c( 5, -5, 7, 2 ) ) 

我正在尝试创建一个图,其中 x 轴具有每个类别的离散点,y 轴是每个类别的所有样本的值,并且跨类别的每个样本的值通过线连接我可以定义的颜色。

似乎ggplot2 是去这里的方式,但我无法找到一种方法来让它按照我想要的方式工作。似乎我希望 colnames( dd ) 在使用 aes() 时成为 x 轴变量,但这警告我 x 和 y 的长度不同。似乎这应该很简单,但我无法弄清楚。

编辑:我遇到过这篇文章Plotting multiple variables from same data frame in ggplot,其中的答案显示了我想要制作的确切类型,但我不知道如何使用melt 将我的数据框更改为将列名称cat_1、cat_2、cat_3 放置为id.vars 的格式。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    reshape2 包中的函数melt 将数据转换为长格式。它将一组列堆叠成一列。您可能需要定义 id 变量,在调用函数后将保持不变。

    如果不带参数调用,melt 将假定因子和字符变量是 id 变量,而所有其他变量都是测量的。此外,它还提供默认列名:“变量”和“值”。结果,旧列名是新列“变量”下的行。

    library(reshape2)
    > melt(df)
    Using sample as id variables
       sample variable value
    1     one    cat_1     2
    2     two    cat_1     4
    3   three    cat_1    -6
    4    four    cat_1     2
    5     one    cat_2     1
    6     two    cat_2     2
    7   three    cat_2     2
    8    four    cat_2     1
    9     one    cat_3     5
    10    two    cat_3    -5
    11  three    cat_3     7
    12   four    cat_3     2
    

    对于您的问题,您可以使用以下代码,指定 id_vars,并指定更多信息的列名(结构保持不变):

    df2 <- melt(df, id_vars = sample, variable.name = "category", value.name = "value")
    
    > df2
       sample category value
    1     one    cat_1     2
    2     two    cat_1     4
    3   three    cat_1    -6
    4    four    cat_1     2
    5     one    cat_2     1
    6     two    cat_2     2
    7   three    cat_2     2
    8    four    cat_2     1
    9     one    cat_3     5
    10    two    cat_3    -5
    11  three    cat_3     7
    12   four    cat_3     2
    
    ggplot(df2, aes( x=category, y=value, group=sample, col=sample)) + 
      geom_line()
    

    产生以下情节

    请告诉我这是否是你想要的。

    【讨论】:

    • 非常感谢,这正是我所追求的。使用melt 的解释非常有用。我的问题是定义什么是变量,什么是类别。
    • 我的荣幸。我很高兴能帮上忙。您可以找到关于重组数据的出色解释:here。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多