2015-03-02 62 views
5

我试图从一个大型数据集(来自循环科学实验)制作R中的动画图,以便随时间变化显示两个变量的变化。 “M使用animation库只是简单地说:R:“InvalidArgument`-delay'with animation and ggplot

saveGIF(
    for(i in 1:100){ 
    mygraph(i) 
}, interval = 0.1, ani.width = 640, ani.height = 480) 

其中mygraph(i)刚生成的图表的周期我如果我使用plot()使图形,然后将其工作完全正常,但如果我改用ggplot(。我希望这样做,因为我最终希望使用它来制作更复杂的图),然后它不起作用,我得到以下输出:

Executing: 
'convert' -loop 0 -delay 'animation.gif' 
convert: InvalidArgument `-delay': animation.gif @ error/convert.c/ConvertImageCommand/1161. 
an error occurred in the conversion... see Notes in ?im.convert 
[1] FALSE 

我对R很新,所以我有点卡住了,我还没有找出解决方案,看看?im.convert或从四处搜索。任何建议,将大大赞赏...

实例虚拟数据的要求:

library(animation) 
library(ggplot2) 

x <- 1:20 
y <- 21:40 
z <- c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4) 
data <- data.frame(x,y,z) 

mygraph <- function(i) { 
    plot(data$x[data$z == i], 
     data$y[data$z == i], 
     title(title)) 
} 

saveGIF(
    for(i in 1:4){ 
    title <- paste("Cycle", i, sep=" ") 
    mygraph(i) 
    }, interval = 0.5, ani.width = 640, ani.height = 480) 

这工作,但如果功能mygraph反而:

mygraph <- function(i) { 
    ggplot() + 
    geom_point(aes(x=data$x[data$z == i], y=data$x[data$z == i])) 
} 

...然后如上所述给我提供了错误。

+0

你可以给我们一个小的可重复的例子吗? – 2015-03-02 12:56:29

+0

用一个简化的例子编辑我的原始问题,它给了我同样的错误。 – mjlacey 2015-03-02 13:12:22

回答

5

如果您将ggplot包含在print()语句中,例如,这似乎有效。

mygraph <- function(i) { 
    g <- ggplot() + 
    geom_point(aes(x=data$x[data$z == i], y=data$x[data$z == i])) 
    print(g) 
} 

这是R-FAQ 7.22的变体,Why do lattice/trellis graphics not work?

+0

非常感谢,这看起来像预期的那样工作! – mjlacey 2015-03-02 13:46:16

+0

如果此答案解决了您的问题,我们建议您点击复选标记以接受它... – 2015-03-02 14:12:24