为什么R与函数中的add
参数不一致plot()
?它有时会起作用,有时却不起作用!在这个例子中,它使参数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))
Run Code Online (Sandbox Code Playgroud)
但是当我发出
plot(c(2, 3, 4), c(20,10,15), add=TRUE, pch="A")
Run Code Online (Sandbox Code Playgroud)
它不起作用!! 它说"添加"不是图形参数.
请不要写我应该使用的points()
.我知道我可以用它.我想了解R的奇怪行为 - 为什么它有时有效,有时不行?
Ben*_*ker 37
这无疑是烦人且不一致的,但它是可以解释的.
编辑:这identity
是一个内置对象(身份函数)的事实让我望而却步(因此问题实际上是可重现的).
identity
是一个类的一个对象- function
-具有plot
方法(plot.function
)与add
参数,而默认的plot
方法并不具有add
参数.
一般来说,在尝试绘制对象时bar
,你应该尝试class(bar)
; 如果它是类,foo
那么试着methods(class="foo")
看它有一个绘图方法,或者methods("plot")
看看它是否plot.foo
存在.试着?plot.foo
看帮助,或plot.foo
或getAnywhere(plot.foo)
看函数本身.
nul*_*lob 27
这是因为当你打电话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
Run Code Online (Sandbox Code Playgroud)
正如Ben Bolker所提到的,methods('plot')
将向您展示在运行时可以调用哪些方法plot()
- 不同的方法具有不同的参数,这些参数在您调用时args(plot.foo)
或在帮助页面中列出?plot.foo
归档时间: |
|
查看次数: |
23194 次 |
最近记录: |