gpt4 book ai didi

r - geom_contour 在 gganimate 中失败但在 ggplot2 中有效

转载 作者:行者123 更新时间:2023-12-03 22:48:07 25 4
gpt4 key购买 nike

我有一个我无法解决的问题。我正在尝试使用 gganimate 和 geom_contour 创建动画。当我将数据框绘制为单个“框架”时,它可以正常工作;然而,当我添加“框架”美学并尝试使用 gganimate 运行它时,geom_contour 无法工作。我不确定在谷歌搜索后发生了什么,因为它是完全相同的数据框。此外,它可以与 geom_raster 一起正常工作。我提供了一个非常小的示例,它代表了我实际尝试做的事情,尽管规模较小。

如有任何帮助,我们将不胜感激。谢谢!

library(mvtnorm)
library(ggplot2)
library(gganimate)

generateLattice <- function(theta,offset,increment){
dim1 <- c(seq(from=theta[1]-offset,to=theta[1]-increment,by=increment),seq(from=theta[1],to=theta[1]+offset,by=increment))
dim2 <- c(seq(from=theta[2]-offset,to=theta[2]-increment,by=increment),seq(from=theta[2],to=theta[2]+offset,by=increment))
lattice <- expand.grid(dim1,dim2)
return(lattice)
}

testLattice <- generateLattice(c(5,5),10,0.05)
testPDF <- apply(testLattice,1,function(x){
dmvnorm(x=x,mean=c(5.5,4.5),sigma=matrix(c(1,0.25,0.25,1),2,2))
})
testLattice$PDF <- testPDF
testLattice$iter <- 1

testLattice1 <- generateLattice(c(6,6),10,0.05)
testPDF1 <- apply(testLattice1,1,function(x){
dmvnorm(x=x,mean=c(5.0,4.75),sigma=matrix(c(0.9,0.15,0.15,1.2),2,2))
})
testLattice1$PDF <- testPDF
testLattice1$iter <- 2

testLatticeGIF <- rbind(testLattice,testLattice1)

ggplot(testLatticeGIF[testLatticeGIF$iter==1,],aes(x=Var1,y=Var2,z=PDF)) +
geom_contour()

#works
p <- ggplot(testLatticeGIF,aes(x=Var1,y=Var2,fill=PDF,frame=iter)) +
geom_raster()
gganimate::gg_animate(p)

#fails
p <- ggplot(testLatticeGIF,aes(x=Var1,y=Var2,z=PDF,frame=iter)) +
geom_contour()
gganimate::gg_animate(p)

最佳答案

原因很简单,geom_contour() 不知道以您传递给它的形式处理数据。以下两个图都不起作用:

ggplot(testLatticeGIF,aes(x=Var1,y=Var2,z=PDF)) +
geom_contour()
## Warning message:
## Computation failed in `stat_contour()`:
## dimensions of 'x', 'y' and 'z' do not match
ggplot(testLatticeGIF,aes(x=Var1,y=Var2,z=PDF,colour=iter)) +
geom_contour()
## Warning message:
## Computation failed in `stat_contour()`:
## dimensions of 'x', 'y' and 'z' do not match

我经常发现使用 colour 而不是 frame 很有帮助。如果这不起作用,则强烈暗示问题不在于 gganimate。在这里,问题是您需要使用 group 美学,以便 geom_contour 知道哪些数据点属于一起:

ggplot(testLatticeGIF,aes(x=Var1,y=Var2,z=PDF,group=iter,colour=iter)) +
geom_contour()

enter image description here

现在它也适用于动画:

p <- ggplot(testLatticeGIF,aes(x=Var1,y=Var2,z=PDF,group=iter,frame=iter)) +
geom_contour()
gganimate::gg_animate(p)

enter image description here

关于r - geom_contour 在 gganimate 中失败但在 ggplot2 中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38807829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com