Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.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 Ggplot-在一行中绘制具有多个点的数据帧,以便使用gganimate为其设置动画_R_Ggplot2_Gganimate - Fatal编程技术网

R Ggplot-在一行中绘制具有多个点的数据帧,以便使用gganimate为其设置动画

R Ggplot-在一行中绘制具有多个点的数据帧,以便使用gganimate为其设置动画,r,ggplot2,gganimate,R,Ggplot2,Gganimate,我有一个数据框,其中每行包含关于某个时间点上8个点的坐标的信息: 时间x1 y1 x2 y2 x3 y3…x8 y8 行可能如下所示,例如: myData <- data.frame(time=0.1,x1=-7.79,y1=7.32,x2=-3.86,y2=-1.62,x3=-1.35,y3=-4.61,x4=-6.24,y4=-9.89,x5=-6.40,y5=2.00,x6=4.02,y6=4.77,x7=-1.42,y7=9.89,x8=6.59,y8=-8.02) myData

我有一个数据框,其中每行包含关于某个时间点上8个点的坐标的信息:

时间x1 y1 x2 y2 x3 y3…x8 y8

行可能如下所示,例如:

myData <- data.frame(time=0.1,x1=-7.79,y1=7.32,x2=-3.86,y2=-1.62,x3=-1.35,y3=-4.61,x4=-6.24,y4=-9.89,x5=-6.40,y5=2.00,x6=4.02,y6=4.77,x7=-1.42,y7=9.89,x8=6.59,y8=-8.02)

myData我刚刚习惯了
tidyr
和管道操作员,因此我将非常感谢任何改进此答案的建议:

您首先需要重塑数据(正如@Heroka所建议的),然后分割轴和点(它们混合在x1、y8名称中),因此您将以一个形状正确的数据框结束,您可以将其传递到ggplot:

gather(myData, "coord", "value", -time) %>% 
  separate(coord, sep = 1, into = c("axis", "val2")) %>% 
  spread(key = axis, value = value) %>% 
  ggplot(aes(x = x, y = y)) + geom_point()
我不熟悉
gganimate
,但我很确定在这里你可以找到你的路径

编辑:

如果将最后一行代码更改为:

ggplot(aes(x = x, y = y, color = val2)) + geom_point()
编辑2:


根据@Sitbu的建议,我更改了第一行代码,我刚刚习惯了
tidyr
和管道操作员,因此我将非常感谢任何改进此答案的建议:

您首先需要重塑数据(正如@Heroka所建议的),然后分割轴和点(它们混合在x1、y8名称中),因此您将以一个形状正确的数据框结束,您可以将其传递到ggplot:

gather(myData, "coord", "value", -time) %>% 
  separate(coord, sep = 1, into = c("axis", "val2")) %>% 
  spread(key = axis, value = value) %>% 
  ggplot(aes(x = x, y = y)) + geom_point()
我不熟悉
gganimate
,但我很确定在这里你可以找到你的路径

编辑:

如果将最后一行代码更改为:

ggplot(aes(x = x, y = y, color = val2)) + geom_point()
编辑2:


按照@Sitbu的建议,我修改了第一行代码,这是基于PavoDive的答案,只是添加了动画部分的制作方法

我定义了一个更大的数据集,这样实际上有一些东西需要动画:

set.seed(1544)
myData <- data.frame(seq(0, 1, by = 0.1),
                     matrix(runif(11*8*2, -10, 10), nrow = 11))
names(myData) <- c("time", paste0(c("x", "y"), rep(1:8, each = 2)))


如果您使用的是RStudio,则可以省略
gg_animate()
中的文件名,以在RStudio的绘图窗格中显示绘图。

这基于PavoDive的答案,只是添加了动画部分的完成方式

我定义了一个更大的数据集,这样实际上有一些东西需要动画:

set.seed(1544)
myData <- data.frame(seq(0, 1, by = 0.1),
                     matrix(runif(11*8*2, -10, 10), nrow = 11))
names(myData) <- c("time", paste0(c("x", "y"), rep(1:8, each = 2)))


如果您使用的是RStudio,您可以省略
gg_animate()
中的文件名,以在RStudio的绘图窗格中显示绘图。

您可以制作一个可复制的示例吗?看,我的方法是融化你的数据(可能必须使用data.table来完成此操作,因为它接受两个测量变量。然后您可以添加
frame=Time
@Heroka我在问题中添加了一个dataframe示例。我无法再添加任何代码,因为我不知道如何使ggplot实现我想要的功能。ggplot需要长格式的数据。请尝试第一步:
库(data.table)
m_dat Juraj-请说明您的尝试。我建议您让Heroka融化您的数据框。在前往ggplot2之前,我使用库tidyr和dplyr。谢谢您,@Heroka,您的方法奏效:)您能给出一个可复制的示例吗?看看,我的方法是融化您的数据(可能必须使用data.table来完成此操作,因为它接受两个测量变量。然后您可以添加
frame=Time
@Heroka我在问题中添加了一个dataframe示例。我无法再添加任何代码,因为我不知道如何使ggplot实现我想要的功能。ggplot需要长格式的数据。请尝试第一步:
库(data.table)
m_dat Juraj-请展示您的尝试。我建议您让Heroka融化您的数据框架。在前往ggplot2之前,我使用库tidyr和dplyr。谢谢,@Heroka,您的方法奏效了:)太好了!我不知道
separate()
…只有一个建议:在第一行中,您可以编写
收集(myData,“coord”,“value”,-time)
,它更清晰,并且无论有多少列都保持不变。太好了!我不知道
分离()
…只有一个建议:在第一行中,您可以编写
收集(myData,“coord”,“value”,-时间)
,它更清晰,并且无论有多少列,都保持不变。我从来没有必要为一个情节设置动画,所以我认为
gganimate
相当复杂。它非常简单!一件可能很方便的事情是固定轴限制,这样观众实际上可以实现每个时间步每个点的移动。这是不必要的非常简单。所以我们都学到了一些东西!关于你的评论:轴保持不变。想象一下,你将把
时间
映射到
颜色
而不是
。然后,
ggplot()
将选择轴,以便在绘图中显示所有颜色的点。当您将
时间
映射到
时,也会执行相同操作。您可以通过修改
长_数据
来尝试此操作,如下所示:
长_数据[长_数据$time==0.5,“x”]我从来没有需要为一个情节设置动画,所以我认为
gganimate
相当复杂。它非常简单!有一件事可能会很方便,那就是固定轴的限制,这样观众可以,事实上,在每个时间步实现每个点的移动。这非常简单。所以我们都学到了一些东西!关于你的评论:轴a我们保持不变。假设您将
时间
映射到
颜色
,而不是
。然后,
ggplot()
将选择轴,以便在绘图中显示所有颜色的点。当您将
时间
映射到
时,也会执行相同操作。您可以通过修改
长_数据
来尝试此操作,如下所示:
长_数据[长_数据$time==0.5,“x”]