背景:
我正在运行蒙特卡罗模拟,以表明一个特定的过程(一个累积的平均值)是否会随着时间的推移而而不是收敛,并且在模拟中常常会出现很大的分歧(随机变量的期望=无穷大)。我想在一张线图上画出大约10个这样的模拟,其中x轴有迭代数,y轴有到那个点的累积平均值。
,这是我的问题:
我将运行第一个模拟(每个sim )。具有10,000次迭代),并根据其当前范围构建主图。但通常情况下,其中一个模拟的范围会比第一个大几个数量级,所以地块飞出了原来的范围。那么,有没有办法在添加一组新的点或线时动态地更新绘图的ylim或xlim呢?
为此,我可以想到两个解决方案: 1.存储每个模拟,然后选择一个具有最大范围的模拟,然后根据它构建基本图(不优雅,我必须在内存中存储大量数据,但可能是笔记本友好的[编辑:正如马立克指出的,这不是一个内存紧张的例子,但如果您知道一个很好的解决方案,可以支持更多的迭代,这就成了一个问题(想象一下,高维行走需要更多的时间),2.找到一个似乎构建了一个好看的版本的种子,然后手动设置ylim,这将使演示具有可复制性。
很自然,我在为比我的解决方案更优雅的东西而坚持。希望这不是太平淡无奇的问题,因为我认为在R.模拟并不少见,有什么想法吗?
发布于 2009-09-25 06:52:48
我不确定这是否可能使用基本图形,如果有人有一个解决方案,我想看看它。然而,基于网格的图形系统(格子和ggplot2)允许保存和更新图形对象。在ggplot2中它是非常容易的。
require(ggplot2)
制作一些数据并得到范围:
foo <- as.data.frame(cbind(data=rnorm(100), numb=seq_len(100)))创建一个初始的ggplot对象并绘制它:
p <- ggplot(as.data.frame(foo), aes(numb, data)) + layer(geom='line')
p创建更多的数据并将其添加到绘图中。
foo <- as.data.frame(cbind(data=rnorm(200), numb=seq_len(200)))
p <- p + geom_line(aes(numb, data, colour="red"), data=as.data.frame(foo))绘制新对象
p发布于 2009-09-25 06:06:42
我认为(1)是最好的选择。我真的不认为这不雅致。我认为,每次您到达大于xlim或ylim的点时,重绘都会更需要计算量。
此外,在Peter关于贝叶斯统计的书中,我看到了对累积和/均值使用ts()而不是line()的很酷的使用。它看起来很漂亮:

https://stackoverflow.com/questions/1475631
复制相似问题