ggplot2()按因数对一个变量进行自绘?

时间:2018-12-13 15:54:13

标签: r ggplot2

我正在尝试使用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))

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

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

2 个答案:

答案 0 :(得分:4)

使用tidyverse函数,您可以完成

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

enter image description here

答案 1 :(得分:2)

我仍然会使用一个data.frame,但会进行重塑(可以使用dcast包中的reshape2)。例如:

# 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()