varias superponer studio modificar lineas leyendas graficos graficas ggplot ejes r plot legend

studio - superponer graficas en r ggplot



trazar funciones con símbolos de puntos llenos y leyenda (2)

Creo que tal vez tengas mejor suerte usando la curve :

curve(x^(2) / 2,from = 0,to = 100,col = ''red'',type = ''p'',pch = 16,n = 20) curve((1-x^(2))/2 + 5000,from = 0,to = 100,col = ''blue'',type = ''p'',pch = 15,add = TRUE,n = 20) legend("topleft", inset = c(0,0.4), cex = 1.5, bty = "n", legend = c("A", "B"), text.col = c("red", "blue"), col = c("red", "blue"), pch = c(16,15))

Tenga en cuenta que tuve que modificar ligeramente sus funciones para obtener una salida que coincidiera con su imagen.

Para evitar especificar color y llenar por separado (que en general es cómo se hacen las cosas en R), utilicé algunos símbolos antiguos "heredados". Usar la curve es a menudo mucho más simple para trazar funciones o expresiones. También le brinda una forma más conveniente de especificar la cuadrícula de puntos para evaluar. También tiene un argumento de add que le permite omitir el incómodo hacking par usted realizó.

Quiero trazar dos funciones en diferentes colores y estilos de puntos con una leyenda correspondiente, en R simple .

Tengo varias preguntas:

  1. Estoy usando pch=21 y pch=22 . Mi entendimiento es que son símbolos "llenos". Aparecen llenos como se esperaba en la leyenda, pero parecen huecos en el gráfico en sí. ¿Qué pasa?

  2. ¿Puedo obtener más espacio entre los puntos sin especificar una cuadrícula manualmente? tal vez seleccionando la cantidad de puntos a imprimir?

  3. Siéntase libre de agregar cualquier tipo de consejo que desee. Soy muy nuevo en R. En particular, ¿hay una mejor manera de trazar dos funciones? por ejemplo, definiendo vectores de funciones? y ¿no habría una manera de que la leyenda se genere automágicamente sin tener que especificar colores y formas, en R simple?

Aquí está mi código:

par(new=TRUE) p1 <- plot(function(x){ x^(2)/2 } , 0, 100 , xlab = "x" , ylab = "y" , ylim = c(0,5000) , las = 1 , type = "p" , cex = 0.8 , pch = 21 , col = "red" ) par(new=TRUE) p2 <- plot(function(x){ (1-x^(2))/2 } , 0, 100 , xlab = "" , ylab = "" , axes = FALSE , type = "p" , cex = 0.8 , pch = 22 , col = "blue" ) par(new=TRUE) l <- legend( "topleft" , inset = c(0,0.4) , cex = 1.5 , bty = "n" , legend = c("A", "B") , text.col = c("red", "blue") , pt.bg = c("red","blue") , pch = c(21,22) )

Después de varias exploraciones, opté por usar el "truco" par(new=TRUE) para superponer las dos funciones (en lugar de, por ejemplo, usar matplot o una combinación de trama y puntos o diseño). ¿Fue ese un mal movimiento para empezar? (Editar: sí, muy mal, ver abajo) +1 si no me pides que lea el manual ;-)

Editar: Resumen de soluciones

Gracias a Joran y Didzis Elferts, obtuve una solución a varios de mis problemas. Para el registro, me gustaría resumir aquí:

  1. Para obtener símbolos rellenos en el gráfico, debe especificar tanto col (color) como bg (fondo). Esto es cierto incluso para pch=21 y pch=22 , que no se llenan automáticamente por el color especificado. Para obtener símbolos rellenos en la leyenda, debe especificar tanto col como pt.bg. Aquí, bg solo no es lo suficientemente bueno.

  2. es una muy mala idea usar par(new=TRUE) con axes=FALSE , como lo había hecho inicialmente, porque las gráficas superpuestas no necesariamente usan el mismo sistema de coordenadas. La función prevista para la segunda trama era (100^2-x^2)/2 pero inadvertidamente escribí (1-x^2)/2 y no me di cuenta porque había establecido ejes = FALSO.

En general, esta es mi solución preferida:

curve( x^2/2 , from = 0 , to = 100 , n = 30 , type = "p" , pch = 21 # alternatively pch=15 is a solid symbol , col = "red" # colors the outline of hollow symbol pch=21 , bg = "red" # fills hollow symbol pch=21 with color , xlab = "x" , ylab = "y" ) curve( (100^2-x^2)/2 , from = 0 , to = 100 , n = 30 , type = "p" , pch = 22 # alternative pch=16 , col = "blue" , bg = "blue" , add = TRUE ) legend( "topleft" , inset = c(0,0.4), , cex = 1.5, , bty = "n", , legend = c("A", "B"), , text.col = c("red", "blue"), , col = c("red", "blue"), , pt.bg = c("red","blue") , pch = c(21,22) )

Esto produce una trama como la que muestra joran. Muchas gracias a los dos por su ayuda.


Debe agregar el argumento bg="red" o bg="blue" dentro de la plot() para obtener los símbolos rellenos con un color particular.