首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R保存图像以创建具有大量点数的增量生成的情节动画。

R保存图像以创建具有大量点数的增量生成的情节动画。
EN

Stack Overflow用户
提问于 2012-07-23 11:17:48
回答 1查看 1.5K关注 0票数 2

我正试图创建一个基于散点图的动画,这个散点图是随着时间的推移逐步建立起来的。用例是,我有一个大约200万点的数据库,每个数据库都有时间戳,并且希望生成框架来显示特定日期或之前的所有点。

在不保存映像的情况下,我可以首先调用plot(),然后使用for循环使用points()函数递增地绘制每一天的数据。

当我试图使用下面的代码保存图像时,会出现"plot.new尚未被调用“的错误。据我所知,保存图像需要dev.off(),但这也关闭了正在绘制的设备。有办法绕过这件事吗?由于数据的大小,必须重新绘制每一帧的数据并不是很好的选择。

代码语言:javascript
复制
plot(info$lon, info$lat, xlim=c(0,30), ylim=c(30,60))
for (i in c(1:length(allDates))){
    filename=paste(sprintf('%05d', i), ".png", sep="")  
    png(filename=fileName)
    # (code that gets the data for a particular date via a database query)
    points(info$lon, info$lat, cex=0.1)
    dev.off()
}

更新: @roman-lustrik关于ggsave()的评论是我想要的,结果在下面的代码中:

代码语言:javascript
复制
plotObj = ggplot(...) + geom_point() + xlim(...) + ylim(...)
for (i in c(1:length(allDates))){
    filename=paste(sprintf('%05d', i), ".png", sep="")  
    # (code that gets the data for a particular date via a database query)
    plotObj = plotObj + geom_point(data=info, aes(x=lon, y=lat), size=0.5)
    print(plotObj)
    ggsave(filename=filename, width=6, height=6)
}

但是,这仍然有点慢,所以我当前快速呈现图像的解决方案是使用与原始代码类似的代码,但我只使用plot()来为单个日期(使用透明的背景)呈现数据框架。为了逐步叠加图像,我使用bash脚本,它使用imagemagick convert -composite命令将两个图像混合在一起。然后将这个混合图像与下一个日期的图像混合,以此类推,直到最终图像显示所有数据:

代码语言:javascript
复制
#!/bin/bash
for i in $files
do
    convert $prevFile $i -composite ./stackedImages/$i
    prevFile=./stackedImages/$i
done
EN

回答 1

Stack Overflow用户

发布于 2012-07-23 12:03:02

如果我已经理解了,您希望获得几个png文件,其中包含不同数量的点,以及由plot(info$lon, info$lat, xlim=c(0,30), ylim=c(30,60))创建的第一个点。

你可以这样做:

代码语言:javascript
复制
temp1 <- info$lon
temp2 <- info$lat
for (i in c(1:length(allDates))){
        filename=paste(sprintf('%05d', i), ".png", sep="")  
        png(filename=fileName)
        plot(temp1, temp2, xlim=c(0,30), ylim=c(30,60))
        # (code that gets the data for a particular date via a database query)
        points(info$lon, info$lat, cex=0.1)
        dev.off()
        temp1 <- c(temp1,info$lon)
        temp2 <- c(temp2,info$lat)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11611456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档