Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R ggplot2()按因子绘制一个变量的自身?_R_Ggplot2 - Fatal编程技术网

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

R ggplot2()按因子绘制一个变量的自身?,r,ggplot2,R,Ggplot2,我试图使用ggplot创建一个带有两条线的几何点,通常这两条线来自数据帧中的两个不同变量,例如 library(ggplot2) ggplot(aes(x=var1,y=var2),data = df) + geom_point() 然而,在这种情况下,我有一个垂直堆叠的变量(代表一个复制1和2),在另一列中有一个分数(同样来自两个复制): 我想做的是一个简单的ggplot或折线图,试验1在y轴上,试验2在x轴上。在基本绘图函数中,这很简单,因为它只需要将数据拆分为两个不同的数据帧。然而,在

我试图使用ggplot创建一个带有两条线的几何点,通常这两条线来自数据帧中的两个不同变量,例如

library(ggplot2)
ggplot(aes(x=var1,y=var2),data = df) + geom_point() 
然而,在这种情况下,我有一个垂直堆叠的变量(代表一个复制1和2),在另一列中有一个分数(同样来自两个复制):

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


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

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

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

使用tidyverse函数,您可以

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

你能澄清一下突变(id=1:n())吗?这实际上是在为每个因素的长度创建索引吗?如果是这样的话,它们不按顺序排列有关系吗?好吧,您需要某种方法来匹配试验1的值和试验2的值。我以为你想让他们按照出现的顺序配对。这只是在组中对它们进行索引,以便它们可以匹配。好的,我将尝试按第三列排序,这实际上是一个唯一标识符(id),然后看看会发生什么。将报告。如果您已经有ID,那么您可以使用它。不需要创建一个假的。好的,当我这样做时,它会创建两列,但在行之间交替插入NAs,这意味着它无法正确打印。基本上每个id都交错一行。感谢您的输入。我选择了第一个选项,但看起来不错。
library(ggplot2)
ggplot(df2, aes(trial2, trial1)) + geom_point()
library(dplyr)
library(tidyr)
library(ggplot2)
dd %>% 
  group_by(fac) %>% 
  mutate(id=1:n()) %>% 
  spread(fac, score) %>% 
  ggplot(aes(trial2, trial1)) + 
  geom_line()