我正在尝试使用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有一些工作,但是我不确定如何实现。我希望这足够清楚。
答案 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()
答案 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()