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")
它不工作! 它说“添加”不是一个graphics参数。
请不要写我应该使用points()
来代替。 我知道我可以使用它。 我想了解R的奇怪行为 – 为什么它有时会起作用,有时候不行?
这固然令人讨厌和不一致,但它是可以解释的。
编辑 : identity
是一个内置的对象(身份函数)逃避我的事实(所以这个问题实际上是可重现的)。
identity
是类的一个对象 – function
– 有一个add
参数的plot
方法( plot.function
),而默认的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