【问题标题】:ggplot2() plotting one variable against itself by factor?ggplot2() 按因子绘制一个变量与自身的关系?
【发布时间】:2019-05-14 21:21:36
【问题描述】:

我正在尝试使用 ggplot 创建带有两行的 geom_point,通常这两行来自数据框中的两个不同变量,例如

library(ggplot2)
ggplot(aes(x=var1,y=var2),data = df) + geom_point() 

但是在这种情况下,我有一个垂直堆叠的变量(代表重复 1 和 2),而在另一列中有一个分数(同样来自两个重复):

data.frame(fac=c(rep("trial1",10),rep("trial2",10)),score=rnorm(20,2,1))

我想要做的是一个简单的 ggplot 或 y 轴上的试验 1 和 x 轴上的试验 2 的折线图。在基本绘图功能中,这很简单,因为它只需要将数据拆分为两个不同的数据框。但是在 ggplot 我总是使用相同的数据框,据我所知,我不能使用两个单独的数据框进行调用。那我该怎么做呢?

我猜想在绘图之前使用 group_by 来安排 data.frame 有一些工作,但我不确定如何实现它。我希望这足够清楚。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    使用tidyverse函数,你可以做到

    library(dplyr)
    library(tidyr)
    library(ggplot2)
    dd %>% 
      group_by(fac) %>% 
      mutate(id=1:n()) %>% 
      spread(fac, score) %>% 
      ggplot(aes(trial2, trial1)) + 
      geom_line()
    

    【讨论】:

    • 你能澄清一下mutate(id=1:n())吗?这本质上是为每个因素的长度创建一个索引吗?如果是这样,它们不是按顺序排列有关系吗?
    • 你需要一些方法来匹配试验 1 的值和试验 2 的值。我假设您希望它们按照它们出现的顺序匹配。这只是在组中对它们进行索引,以便它们可以匹配。
    • 好的,我将尝试按本质上是唯一标识符 (id) 的第三列进行排序,然后看看会发生什么。会回来报告的。
    • 如果你已经有一个ID,那么你就可以使用它。无需制造假的。
    • 好的,所以当我这样做时,它会创建两列,但会在行之间交替插入 NA,这意味着它不会正确绘制。基本上每个 id 都错开一行。
    【解决方案2】:

    我仍然会使用一个 data.frame,但会重新调整(您可以使用 reshape2 包中的 dcast)。例如:

    # use `nrow(df) / 2` to split data in half
    df2 <- reshape2::dcast(df, seq_len(nrow(df) / 2) ~ fac, value.var = "score")
    

    然后简单地绘制它:

    library(ggplot2)
    ggplot(df2, aes(trial2, trial1)) + geom_point()
    

    【讨论】:

    • 感谢您的意见。我选择了第一个选项,但看起来不错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多