R不一致性:为什么add = T有时会起作用,有时不在plot()函数中?
为什么R与plot()
函数中的add
参数不一致? 它有时有效,有时不起作用! 在这个例子中,它使用参数add=TRUE
而没有问题:
plot(0:10, 0:10*3)
plot(identity, add=TRUE, xlim=c(0,10))
plot(function (x) { sin(x)*10 }, add=TRUE, xlim=c(0,10))
但是当我问题
plot(c(2, 3, 4), c(20,10,15), add=TRUE, pch="A")
它不工作! 它说“添加”不是图形参数。
请不要写我应该使用points()
来代替。 我知道我可以使用它。 我想了解R的奇怪行为 - 为什么它有时会工作,有时候不行?
这确实是令人讨厌和不一致的,但它是可以解释的。
编辑 : identity
是一个内置对象(身份函数)的事实避免了我(所以问题实际上是可重现的)。
identity
是一个类的对象- function
-具有plot
方法( plot.function
)与add
参数,而默认的plot
方法不具有add
参数。
一般来说,当试图绘制对象bar
,你应该尝试class(bar)
; 如果它是类foo
则尝试使用methods(class="foo")
来查看它是否有plot方法或methods("plot")
以查看plot.foo
存在。 尝试?plot.foo
查看帮助,或者使用plot.foo
或getAnywhere(plot.foo)
查看函数本身。
这是因为当你调用plot(0:10, 0:10*3)
plot(c(2, 3, 4), c(20,10,15))
plot(0:10, 0:10*3)
或plot(c(2, 3, 4), c(20,10,15))
,你间接调用了plot.default()
,这又会调用plot.xy()
,而您提到的另外两个调用正在运行plot.function()
。 add
是plot.function()
的参数,但不适用于plot.xy()
。
您可以通过设置par(new = TRUE)
来解决这种不一致问题,但是您需要确保不添加新轴标签或重新绘制坐标轴。 编辑:正如在评论中指出的,你必须确保范围与前面的情节相同。 例如:
plot(0:10, 0:10*3)
plot(identity, add=T, xlim=c(0,10))
plot(function (x) { sin(x)*10 }, add=T, xlim=c(0,10))
par(new = TRUE)
plot(c(2, 3, 4), c(20,10,15), pch="A",
axes = FALSE, ## don't redraw the axes
xlab = '', ylab = '', ## no fresh axis labels
xlim = c(0,10), ylim = c(0,30)) ## keep the same limits as before
正如Ben Bolker提到的, methods('plot')
会告诉你在运行plot()
时可以调用什么方法 - 不同的方法有不同的参数,当你调用args(plot.foo)
或者在帮助页面时会列出不同的参数?plot.foo
上一篇: R inconsistency: why add=T sometimes works and sometimes not in the plot() function?