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

Ham*_*mer 3 plot r

背景:

我运行蒙特卡罗模拟表明,特定的过程(累计平均)并没有收敛一段时间,并经常在模拟(随机变量的期望值为无穷大)广泛发散.我想在折线图上绘制这些模拟中的10个,其​​中x轴具有迭代次数,y轴具有直到该点的累积平均值.

这是我的问题:

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

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

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

Pet*_*ter 5

我不确定使用基本图形是否可行,如果有人有解决方案,我很乐意看到它.但是,基于网格(lattice和ggplot2)的图形系统允许保存和更新图形对象.在ggplot2中它非常容易.

require(ggplot2)

制作一些数据并获得范围:

foo <- as.data.frame(cbind(data=rnorm(100), numb=seq_len(100)))
Run Code Online (Sandbox Code Playgroud)

制作一个初始的ggplot对象并绘制它:

p <- ggplot(as.data.frame(foo), aes(numb, data)) + layer(geom='line')
p
Run Code Online (Sandbox Code Playgroud)

制作更多数据并将其添加到图中

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))
Run Code Online (Sandbox Code Playgroud)

绘制新对象

p
Run Code Online (Sandbox Code Playgroud)