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?
