R:更新情节[xy] lims与新点()或行()添加?

时间:2009-09-25 05:53:32

标签: r plot

背景:

我正在运行蒙特卡罗模拟,以显示特定过程(累积平均值)随时间收敛,并且在模拟中经常出现偏差(随机变量的期望=无限远) )。我想在折线图上绘制大约10个这样的模拟,其中x轴具有迭代次数,y轴具有直到该点的累积平均值。

以下是我的问题:

我将运行第一个模拟(每个模拟器,有10,000次迭代),并根据其当前范围构建主图。但是,通常其中一个模拟的范围比第一个范围大几个数量级,因此情节会超出原始范围。那么,有没有办法在添加一组新的点或线时动态更新图的ylim或xlim?

我可以为此考虑两个变通方法:1。存储每个模拟,然后选择范围最大的模拟,并构建基本图形(不优雅,我会必须在内存中存储大量数据,但可能是笔记本电脑友好的 [[编辑:正如Marek所指出的,这不是一个记忆密集的例子,但如果你知道一个很好的解决方案,那就支持更多的迭代使它成为一个问题(想想高维行走需要更多,更大的MC样本进行收敛)然后直接进入]] )2。找到一个似乎构建一个漂亮的版本的种子它,并手动设置ylim,这将使演示可重现。

当然,我正在坚持比我的解决方案更优雅的东西。希望这不是一个行人问题,因为我想在R中的模拟并不少见。任何想法?

2 个答案:

答案 0 :(得分:5)

我不确定使用基本图形是否可行,如果有人有解决方案,我很乐意看到它。但是,基于网格(lattice和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

答案 1 :(得分:0)

我认为(1)是最好的选择。我实际上并不认为不是优雅。我认为每次达到大于xlim或ylim的点时重绘都会计算量更大。

另外,我在Peter Hoff关于贝叶斯统计的书中看到了ts()而不是line()用于累积和/手段的很好用法。它看起来很漂亮:

alt text