【问题标题】:Replace a plot under the par() function of R替换 R 的 par() 函数下的绘图
【发布时间】:2014-09-29 02:59:38
【问题描述】:

应该有一个简单的方法来处理这个问题,但我不知道。我正在使用 R 的 par(mfrow=c(5,5)) subplot 函数绘制多个图形(即 25 个图形)。例如,在绘制 10 个数字后,我在第 11 个图上做错了,现在如果我想使用plot 函数再次绘制它,它会占用第 12 个子图的空间,这意味着整个子图结构会发生变化。我知道par(new=TRUE) 会让我在第 11 个图形的顶部重新绘制,但是如果修改后的情节如此不同以至于重叠不起作用怎么办?这个想法是删除第 11 个图形,然后重新绘制它。在绘制完所有 25 个数字后更改第一个图怎么样?

【问题讨论】:

  • 基础图形是附加的。这意味着一旦绘制了某些东西,除非您擦除整个设备,否则它不能被取消绘制。我想你可以在前一个图上绘制白色矩形,但技术上没有“擦除”它。
  • 您是在“手工”绘制 25 个图吗?你不是用脚本吗?只需有一个脚本来制作 25 个绘图,以 par(new=TRUE) 开头,然后您可以随意重新运行脚本,直到获得所需的结果。

标签: r par


【解决方案1】:

可以使用screen 系列函数,尽管我承认我不是它们的爱好者。正如您所希望的那样,它只能用于par(mfrow=c(5.5)) 甚至layout(...)专有

话虽如此,在屏幕上重绘是完全可能的。例如:

split.screen(c(5,5))
for (scr in 1:25) {
    screen(scr)
    par(mar=rep(0,4)+0.1)
    plot(0)
}
screen(7)
par(bg='white') # necessary for some display types
erase.screen()
plot(2)

(这当然不是一个漂亮的例子,但它很实用。)

注意将背景颜色 (bg) 显式设置为白色;对于某些假设为透明的显示器,不这样做似乎没有任何影响(也就是说,erase.screen() 不会做任何事情)。

话虽如此,有许多现代和近现代的图形函数/库/包可以做这个包支持的事情。我还没有使用图像捕获机制(例如将东西夹在png(file="...")dev.off() 中)对此进行测试。 自告奋勇

【讨论】:

    猜你喜欢
    • 2018-10-08
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 2014-08-17
    • 1970-01-01
    相关资源
    最近更新 更多