【问题标题】:Why does plot not respect add = TRUE?为什么情节不尊重add = TRUE?
【发布时间】:2013-08-18 04:38:15
【问题描述】:

为什么 R 的基本绘图功能会这样做?我们必须使用pointslines,这需要特殊代码而不是使用type 参数。

plot(1:10)
plot(10:1, add = TRUE)
Warning messages:
1: In plot.window(...) : "add" is not a graphical parameter
2: In plot.xy(xy, type, ...) : "add" is not a graphical parameter
3: In axis(side = side, at = at, labels = labels, ...) :

等等

只要obj 属于适当的类,许多包都提供(即“覆盖”)绘图方法并提供绘图(obj,add = TRUE)的明显能力。 (例如sprasterspatstat。)

plot.default 还没有什么原因吗?

编辑:这里详细讨论过:

https://stat.ethz.ch/pipermail/r-devel/2008-March/048628.html

DM 在这里有效地回答了它:

https://stat.ethz.ch/pipermail/r-devel/2008-March/048650.html

【问题讨论】:

  • 你可以在par中使用add=TRUE
  • @TylerRinker ?? add 不是 ?par 中的参数
  • add 不是plot.default 的参数。它是给plot.function 的,也许还有一些我不知道的。在上面的示例中,您将使用 points(...)
  • @Gavin 我认为new=TRUE 是 DWin 演示。

标签: r


【解决方案1】:

因为plot.default 没有add 参数

> args(plot.default)
function (x, y = NULL, type = "p", xlim = NULL, ylim = NULL, 
    log = "", main = NULL, sub = NULL, xlab = NULL, ylab = NULL, 
    ann = par("ann"), axes = TRUE, frame.plot = axes, panel.first = NULL, 
    panel.last = NULL, asp = NA, ...) 
NULL

那些其他函数没有覆盖plot,而是提供了自己的方法,它们确实有一个参数add,因为它们是这样编写的。就个人而言,随着使用 points()lines() 等长大,我发现它们没有太多额外的工作,我会优先使用它们而不是带有 add 参数的 plot 方法,尽管我们已经编写了这两个我贡献的包中的方法。

至于为什么plot.default 没有add 参数?您必须询问 R Core,但我可以提出一些理由

  1. plot.default 旨在在设备上生成整个绘图
  2. 已经有points()lines()等,为什么要重复?
  3. plot.default 是更简单的代码,没有处理 add 的代码
  4. 向后兼容 S/S-Plus

【讨论】:

  • 原因加1。
  • “覆盖”和“提供方法”对我来说是同义词。
  • 另一个原因是你不能重置 xlim、ylim 等是一件的事情。函数中有很多你不想要的参数在情节中添加东西。
  • 但这只是简化代码维护和反映图形设备局限性的另一个原因,我认为,与界面的实用性无关。方法编写者不会避免使用 add 选项,因为不为不同类型的绘图函数指定特殊名称非常有用。对我来说,最终的原因是“那是S所做的”,没有人推动。在我看来,使用 par(new = TRUE) 是一种鲁莽的黑客行为,是一种非常容易引起麻烦的方法。
【解决方案2】:

如果未提供add=TRUE(并且您正在使用基本图形),则在调用绘图之前使用par(new=TRUE)。您将需要抑制 xlab、ylab 和其他可能干扰或覆盖现有注释的内容,我确实保留了 ylab 以说明为什么需要该警告。 您还需要将 xlim 和 ylim 设置为相同。

 plot(1:10);par(new=TRUE)
 plot(10:1)

在审查了 cmets 之后,我投票支持 @John 的观点,即新的 plot-call 可能会有不同的 xlim 和 ylim 集,更不用说覆盖边距中所有文本对象的可能性了。 pointslines 没有能力重新计算地块区域的限制,因此它们与 plot.default 一起使用是“安全的”。

【讨论】:

  • 问题是为什么,而不是如何使用它。
  • 好的,那么也许我们应该投票关闭作为离题? (我认为这个问题是关于缺少功能的。所以我认为功能存在于不同机制的事实将是一种答案?)
  • 关闭,这实际上是一个骗局:tolstoy.newcastle.edu.au/R/e4/devel/08/03/0725.html
  • 所以 6 年前,它在 R-devel 中提出,然后没有付诸实施。它得到了@G.Grothendieck 的一些支持,但从未被接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 2015-03-14
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多