ggplot2() 按因子绘制一个变量与自身的关系?

Posted

技术标签:

【中文标题】ggplot2() 按因子绘制一个变量与自身的关系?【英文标题】:ggplot2() plotting one variable against itself by factor? 【发布时间】: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 有一些工作,但我不确定如何实现它。我希望这足够清楚。

【问题讨论】:

【参考方案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()

【讨论】:

感谢您的意见。我选择了第一个选项,但看起来不错。

以上是关于ggplot2() 按因子绘制一个变量与自身的关系?的主要内容,如果未能解决你的问题,请参考以下文章

在 ggplot2 图表中按因子计数

R语言可视化包ggplot2绘制排序条形图实战:按照分类因子排序按照数值排序

如何更改按变量因子分类的ggplot的图例标题

R ggplot2从点到y = 0画线

R中按因子着色图

使用 ggplot2 线绘制平均值?