为什么情节不尊重add = TRUE?

时间:2013-08-15 21:17:12

标签: r

为什么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尚未出现的原因?

编辑:这在这里详细讨论:

http://tolstoy.newcastle.edu.au/R/e4/devel/08/03/0725.html

DM在此有效地回答:http://tolstoy.newcastle.edu.au/R/e4/devel/08/03/0734.html

2 个答案:

答案 0 :(得分:14)

因为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()等成长过程中,我发现他们没有太多额外的工作,我会优先使用plot方法add虽然我们已经在我所贡献的软件包中编写了两种方法。

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

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

答案 1 :(得分:11)

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

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

enter image description here

在审核了评论之后,我的投票是@ John的观点,即新的plot - 调用可能会有一组不同的xlim和ylim,更不用说覆盖边距中所有文本对象的可能性了。 。 pointslines无法重新计算绘图区域的限制,因此它们可以“安全”地与plot.default一起使用。