Recibo esta advertencia cuando intento generar una trama con ggplot
.
Después de investigar en línea durante un tiempo, muchos sugirieron que mi base de datos contiene valores nulos o datos faltantes en general, lo que no era el caso.
En esta pregunta, la respuesta aceptada dice lo siguiente:
La advertencia significa que algunos elementos se eliminan porque caen fuera del rango especificado
Me preguntaba a qué se refiere exactamente este rango y cómo puede alguien aumentar manualmente este rango para evitar todas las advertencias.
y
eje de esa cuestión. Los valores están limitados entre 0 y 0.12 debido a esta función:ylim(0,0.12)
Respuestas:
El comportamiento que está viendo se debe a cómo se
ggplot2
manejan los datos que están fuera de los rangos de los ejes del gráfico. Puede cambiar este comportamiento dependiendo de si usascale_y_continuous
(o, de manera equivalente,ylim
) ocoord_cartesian
para establecer rangos de eje, como se explica a continuación.library(ggplot2) # All points are visible in the plot ggplot(mtcars, aes(mpg, hp)) + geom_point()
En el siguiente código, un punto con hp = 335 está fuera del rango y del gráfico. Además, debido a que solíamos
scale_y_continuous
establecer el rango del eje y, este punto no se incluye en ninguna otra estadística o medida de resumen calculada por ggplot, como la línea de regresión lineal.ggplot(mtcars, aes(mpg, hp)) + geom_point() + scale_y_continuous(limits=c(0,300)) + # Change this to limits=c(0,335) and the warning disappars geom_smooth(method="lm") Warning messages: 1: Removed 1 rows containing missing values (stat_smooth). 2: Removed 1 rows containing missing values (geom_point).
En el siguiente código, el punto con hp = 335 todavía está fuera del rango y del gráfico, pero este punto se incluye, no obstante, en cualquier estadística o medida de resumen que calcula ggplot, como la línea de regresión lineal. Esto se debe a que solíamos
coord_cartesian
establecer el rango del eje y, y esta función no excluye los puntos que están fuera de los rangos del gráfico cuando realiza otros cálculos sobre los datos.Si compara este y el gráfico anterior, puede ver que la línea de regresión lineal en el segundo gráfico tiene una pendiente ligeramente más pronunciada, porque el punto con hp = 335 se incluye al calcular la línea de regresión, aunque no es visible en el gráfico. .
ggplot(mtcars, aes(mpg, hp)) + geom_point() + coord_cartesian(ylim=c(0,300)) + geom_smooth(method="lm")
fuente
Solo por la sacudida completando la respuesta dada por eipi10.
Estaba enfrentando el mismo problema, sin usar
scale_y_continuous
nicoord_cartesian
.El conflicto venía del eje x, donde lo definí
limits = c(1, 30)
. Parece que tales límites no brindan suficiente espacio si desea "esquivar" sus barras, por lo que R aún arroja el errorAjustando los límites del eje x para
limits = c(0, 31)
solucionar el problema.En conclusión, incluso si no está poniendo límites a su eje y, verifique su comportamiento en el eje x para asegurarse de tener suficiente espacio
fuente
Incluso si sus datos caen dentro de sus límites especificados (por ejemplo
c(0, 335)
), agregar unageom_jitter()
declaración podría empujar algunos puntos fuera de esos límites, produciendo el mismo mensaje de error.library(ggplot2) range(mtcars$hp) #> [1] 52 335 # No jitter -- no error message ggplot(mtcars, aes(mpg, hp)) + geom_point() + scale_y_continuous(limits=c(0,335)) # Jitter is too large -- this generates the error message ggplot(mtcars, aes(mpg, hp)) + geom_point() + geom_jitter(position = position_jitter(w = 0.2, h = 0.2)) + scale_y_continuous(limits=c(0,335)) #> Warning: Removed 1 rows containing missing values (geom_point).
Creado el 2020-08-24 por el paquete reprex (v0.3.0)
fuente
También me encontré con esto, pero en el caso en el que quería evitar los mensajes de error adicionales mientras mantenía el rango proporcionado. Una opción es también crear un subconjunto de los datos antes de establecer el rango, de modo que el rango se pueda mantener como desee sin activar advertencias.
library(ggplot2) range(mtcars$hp) #> [1] 52 335 # Setting limits with scale_y_continous (or ylim) and subsetting accordingly ## avoid warning messages about removing data ggplot(data= subset(mtcars, hp<=300 & hp >= 100), aes(mpg, hp)) + geom_point() + scale_y_continuous(limits=c(100,300))
fuente