Recebo este aviso quando tento gerar um gráfico com ggplot
.
Depois de pesquisar online por um tempo, muitos sugeriram que meu banco de dados contém valores nulos ou dados ausentes em geral, o que não era o caso.
Nesta pergunta, a resposta aceita diz o seguinte:
O aviso significa que alguns elementos são removidos porque estão fora do intervalo especificado
Eu queria saber o que exatamente esse intervalo se refere e como alguém pode aumentar esse intervalo manualmente para evitar todos os avisos?
y
eixo dessa questão. Os valores são limitados entre 0 e 0,12 devido a esta função:ylim(0,0.12)
Respostas:
O comportamento que você está vendo é devido ao modo como
ggplot2
lida com os dados que estão fora dos intervalos do eixo do gráfico. Você pode alterar este comportamento dependendo se você usascale_y_continuous
(ou, de forma equivalente,ylim
) oucoord_cartesian
para definir intervalos de eixo, conforme explicado abaixo.library(ggplot2) # All points are visible in the plot ggplot(mtcars, aes(mpg, hp)) + geom_point()
No código a seguir, um ponto com hp = 335 está fora do intervalo y do gráfico. Além disso, como costumávamos
scale_y_continuous
definir o intervalo do eixo y, esse ponto não é incluído em nenhuma outra estatística ou medida de resumo calculada por ggplot, como a linha de regressão linear.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).
No código a seguir, o ponto com hp = 335 ainda está fora do intervalo y do gráfico, mas esse ponto está incluído em quaisquer estatísticas ou medidas de resumo que ggplot calcula, como a linha de regressão linear. Isso é porque usamos
coord_cartesian
definir o intervalo do eixo y, e esta função não exclui pontos que estão fora dos intervalos do gráfico quando ela faz outros cálculos nos dados.Se você comparar este gráfico com o anterior, pode ver que a linha de regressão linear no segundo gráfico tem uma inclinação ligeiramente mais acentuada, porque o ponto com hp = 335 é incluído ao calcular a linha de regressão, embora não seja visível no gráfico .
ggplot(mtcars, aes(mpg, hp)) + geom_point() + coord_cartesian(ylim=c(0,300)) + geom_smooth(method="lm")
fonte
Só pelo shake completando a resposta dada pelo eipi10.
Eu estava enfrentando o mesmo problema, sem usar
scale_y_continuous
nemcoord_cartesian
.O conflito estava vindo do eixo x, onde eu defini
limits = c(1, 30)
. Parece que esses limites não fornecem espaço suficiente se você quiser "desviar" de suas barras, então R ainda gera o erroAjustando os limites do eixo x para
limits = c(0, 31)
resolver o problema.Em conclusão, mesmo se você não estiver colocando limites em seu eixo y, verifique o comportamento do eixo x para garantir que você tenha espaço suficiente
fonte
Mesmo que seus dados caiam dentro de seus limites especificados (por exemplo
c(0, 335)
), adicionar umageom_jitter()
instrução pode empurrar alguns pontos para fora desses limites, produzindo a mesma mensagem de erro.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).
Criado em 2020-08-24 pelo pacote reprex (v0.3.0)
fonte
Eu também encontrei isso, mas no caso em que eu queria evitar as mensagens de erro extras, mantendo o intervalo fornecido. Uma opção é também criar um subconjunto dos dados antes de definir o intervalo, de modo que o intervalo possa ser mantido da maneira que você quiser sem disparar avisos.
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))
fonte