为什么R的基础图功能可以做到这一点?我们必须使用points或lines需要特殊代码而不是使用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, ...) :
Run Code Online (Sandbox Code Playgroud)
等等.
许多包提供了(即"覆盖")绘图的方法,并提供了明显的绘制(obj,add = TRUE)的能力,只要obj是适当的类.(实例是sp,raster,spatstat.)
有什么理由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
Rei*_*son 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
Run Code Online (Sandbox Code Playgroud)
那些其他函数不是重写,plot而是提供自己的方法,add因为它们是以这种方式编写的.就个人而言,随着使用points()和lines()等长大,我没有找到额外的工作,我会优先使用它们而不是plot带有add参数的方法,尽管我们已经在我所贡献的包中编写了两种方法.
至于为什么plot.default没有add争论呢?你必须问R Core,但我可以提出一些理由
plot.default 旨在在设备上生成整个图points()和lines()等,为什么重复?plot.default 代码更简单,没有代码可以处理 add42-*_*42- 11
如果add=TRUE未提供(并且您使用基本图形),则par(new=TRUE)在绘图调用之前使用.您将需要抑制可能干扰或覆盖现有注释的xlab,ylab和其他内容,并且我确实保持ylab不动以说明为什么需要该警告.您还需要将xlim和ylim设置为相同.
plot(1:10);par(new=TRUE)
plot(10:1)
Run Code Online (Sandbox Code Playgroud)

在评论了评论之后,我的投票是@ John的观点,即一个新的plot调用可能会有一个不同的xlim和ylim集合,更不用说覆盖边缘中所有文本对象的可能性了.points并且lines无法重新计算绘图区域的限制,因此它们可以"安全"使用plot.default.