varias superponer poligono ojiva modificar lineas graficos graficas frecuencia ejes r plot add

superponer - Inconsistencia R: ¿por qué add=T a veces funciona y otras veces no en la función plot()?



superponer graficas en r (2)

Esto es ciertamente molesto e inconsistente, pero es explicable.

editar : el hecho de que la identity es un objeto incorporado (función de identidad) me eludió (por lo que el problema es de hecho reproducible).

identity es un objeto de una clase - function - que tiene un método de plot ( plot.function ) con un argumento add , mientras que el método de plot predeterminado no tiene un argumento add .

En general, cuando trates de trazar la bar objetos, deberías probar la class(bar) ; si es de clase foo , prueba con methods(class="foo") para ver si tiene un método de trazado, o methods("plot") para ver que plot.foo existe. Pruebe ?plot.foo para ver la ayuda, o plot.foo o getAnywhere(plot.foo) para ver la función en sí.

¿Por qué R es inconsistente con el parámetro add en la función plot() ? ¡A veces funciona y a veces no funciona! En este ejemplo, toma el parámetro add=TRUE sin problema:

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))

Pero cuando publico

plot(c(2, 3, 4), c(20,10,15), add=TRUE, pch="A")

¡No funciona! Dice que "agregar" no es un parámetro gráfico.

Por favor, no escriba que debería usar points() lugar. Sé que puedo usarlo. Quiero entender el comportamiento extraño de R: ¿por qué a veces funciona y otras no?


Esto se debe a que cuando llamas a plot(0:10, 0:10*3) o plot(c(2, 3, 4), c(20,10,15)) , estás llamando indirectamente a plot.default() , que a su vez llama a plot.xy() , mientras que las otras dos llamadas que menciona están ejecutando plot.function() . add es un argumento para plot.function() , pero no para plot.xy() .

Puede solucionar esta incoherencia configurando par(new = TRUE) , pero luego debe asegurarse de no agregar nuevas etiquetas de eje o redibujar los ejes. EDITAR: Como se señala en el comentario, debe asegurarse de que el rango sea el mismo que el del gráfico anterior. p.ej:

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

Como Ben Bolker menciona, los methods(''plot'') le mostrarán qué métodos se pueden invocar cuando se ejecuta plot() : los diferentes métodos tienen argumentos diferentes, que se enumeran cuando se llama a args(plot.foo) o en la página de ayuda ?plot.foo