【问题标题】:R: Postpone plot() output until all lines have been added?R:推迟 plot() 输出直到所有行都被添加?
【发布时间】:2012-02-17 10:50:00
【问题描述】:

我制作并实时更新了两个图,如下所示:

我使用标准函数 plot()lines() 生成了这些图。 由于我实时生成并重新生成这些图,因此需要进行大量的重新绘制和闪烁。

是否可以推迟输出到显示器,直到两个绘图都完成? (也就是说,直到为两者都添加了行?)

【问题讨论】:

  • 这不是它们的样子:而是您构建它们的方式。我不确定您为什么关心,但您可以查看lattice 包中的xyplot,它允许您在一次调用中指定所有数据集。但是,与您在 R 中所做的任何事情相比,“重新绘制和闪烁”更多的是取决于计算机 CPU 和显示驱动程序的速度。
  • animation 包也可能很有趣。
  • 非常好的问题,而且,如果它也推迟轴的自动缩放会很好 - 它会等待所有数据,然后只是执行自动缩放过程!

标签: r


【解决方案1】:

您可以尝试使用dev.holddev.flush

plot(NA, xlim=c(0,1), ylim=c(0,1), type="n")
dev.hold()
for(i in 1:1e4) {
  lines( runif(2), runif(2) )
}
dev.flush()

【讨论】:

  • 非常好!但是,如果它还推迟轴 (xlim, ylim) 的自动缩放,那就太好了 - 它会等待所有数据,然后只执行自动缩放过程!手动指定 xlim、ylim 很烦人,即使使用 range。我讨厌它。
  • @Tomas:首先,由于对lines 的每次调用都独立于其他调用,因此自动缩放在物理上是不可能的。一旦lines 完成,图形窗口就会“忘记”输入,因此AFAIK 无法将以前的数据与新数据进行比较。一个比较简单的变通方法就是简单的创建变量xrng <- c(min(data_1,data_2,[etc]), max(data_1,data_2,[etc])),然后调用plot([blahblah],xlim=xrng,ylim=yrng)
  • @CarlWitthoft,正如我所写(如xlim = range(data1$x, data2$x, ...)),使用range 的解决方法要简单得多,但正如我所说,我讨厌这样做。 R 应该能够为我做到这一点,记住所有的比例,最后自动缩放和绘图。这就是设计良好的绘图库应该如何工作。点。
  • @Tomas:自动缩放是可能的:只需使用ggplot2。而且您不再需要担心闪烁:绘图仅在末尾显示,或者在您明确打印时显示。
  • 感谢文森特,我认为这些库可以做到!但是,我更喜欢使用基本库 - 如果里面有解决方案,我会很高兴。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 2011-09-15
  • 1970-01-01
相关资源
最近更新 更多