R incohérence: pourquoi add=T fonctionne parfois et parfois pas dans la fonction plot ()?
pourquoi R est-il incompatible avec le add
paramètre plot()
fonction?
Cela fonctionne parfois et parfois ne pas!
Dans cet exemple, il prend le paramètre add=TRUE
sans problème:
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))
Mais quand j'question
plot(c(2, 3, 4), c(20,10,15), add=TRUE, pch="A")
ça ne marche pas!! Il est dit que "ajouter" n'est pas un paramètre graphique.
Merci de ne pas écrire que je dois utiliser points()
à la place. Je sais que je peux l'utiliser.
Je veux comprendre le comportement étrange de R-pourquoi le fait parfois travail et parfois pas?
2 réponses
C'est certes ennuyeux et incohérent, mais c'est explicable.
modifier: le fait que identity
est un objet intégré (fonction identité) m'a échappé (de sorte que le problème est en fait reproductible).
identity
est un objet d'une classe -- function
-- qui a un plot
méthode (plot.function
) avec add
argument, alors que la valeur par défaut plot
la méthode fait add
argument.
En général, quand essayer de tracer l'objet bar
, vous devriez essayer class(bar)
; si elle est de classe foo
ensuite, essayez methods(class="foo")
pour voir qu'il a une parcelle d'une méthode ou d' methods("plot")
voir plot.foo
existe. Essayez ?plot.foo
voir l'aide, ou plot.foo
ou getAnywhere(plot.foo)
voir la fonction elle-même.
C'est parce que lorsque vous appelez plot(0:10, 0:10*3)
ou plot(c(2, 3, 4), c(20,10,15))
, vous appelez indirectement plot.default()
, qui à son tour appelle plot.xy()
, tandis que les deux autres appels que vous mentionnez sont en cours d'exécution plot.function()
. add
est un argument pour plot.function()
, mais pas pour plot.xy()
.
vous pouvez contourner cette incohérence en positionnant par(new = TRUE)
, mais ensuite vous devez vous assurer que vous n'ajoutez pas de nouvelles étiquettes axiales ou redessinez les axes. EDIT: Comme indiqué dans le commentaire, vous devez vous assurer que la gamme est le même que le graphique précédent. par exemple:
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
comme le mentionne Ben Bolker,methods('plot')
vous montrera quelles méthodes peuvent être appelées lors de l'exécution de plot()
- les différentes méthodes ont des arguments différents, qui sont énumérés lorsque vous appelez args(plot.foo)
ou dans la page d'aide ?plot.foo