Spiegare l'avviso ggplot2: "Rimosse k righe contenenti valori mancanti"


90

Ricevo questo avviso quando provo a generare una trama con ggplot.

Dopo aver cercato online per un po ', molti hanno suggerito che il mio database contenga valori nulli o dati mancanti in generale, il che non era il caso.

In questa domanda la risposta accettata dice quanto segue:

L'avviso indica che alcuni elementi vengono rimossi perché non rientrano nell'intervallo specificato

Mi chiedevo a cosa si riferisce esattamente questo intervallo e come può qualcuno aumentare manualmente questo intervallo per evitare tutti gli avvisi?


5
C'è un limite yall'asse su questa domanda. I valori sono limitati tra 0 e 0,12 a causa di questa funzione:ylim(0,0.12)
LyzandeR

1
Un esempio riproducibile aiuterebbe a rispondere alla domanda. @LyzandeR sembra seguire la strada giusta.
vpipkt

Risposte:


85

Il comportamento che stai vedendo è dovuto al modo in cui ggplot2tratta i dati che sono al di fuori degli intervalli degli assi del grafico. È possibile modificare questo comportamento a seconda che si utilizzi scale_y_continuous(o, in modo equivalente ylim) o coord_cartesianper impostare gli intervalli degli assi, come spiegato di seguito.

library(ggplot2)

# All points are visible in the plot
ggplot(mtcars, aes(mpg, hp)) + 
  geom_point()

Nel codice seguente, un punto con hp = 335 è al di fuori dell'intervallo y del grafico. Inoltre, poiché eravamo soliti scale_y_continuousimpostare l'intervallo dell'asse y, questo punto non è incluso in altre statistiche o misure di riepilogo calcolate da ggplot, come la linea di regressione lineare.

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

Nel codice seguente, il punto con hp = 335 è ancora al di fuori dell'intervallo y del grafico, ma questo punto è comunque incluso in tutte le statistiche o misure di riepilogo che ggplot calcola, come la linea di regressione lineare. Questo perché eravamo soliti coord_cartesianimpostare l'intervallo dell'asse y e questa funzione non esclude i punti che sono al di fuori degli intervalli del grafico quando esegue altri calcoli sui dati.

Se confronti questo e il grafico precedente, puoi vedere che la retta di regressione lineare nel secondo grafico ha una pendenza leggermente più ripida, perché il punto con hp = 335 è incluso nel calcolo della retta di regressione, anche se non è visibile nel grafico .

ggplot(mtcars, aes(mpg, hp)) + 
  geom_point() +
  coord_cartesian(ylim=c(0,300)) +
  geom_smooth(method="lm")

12

Solo per la scossa di completare la risposta data da eipi10.

Stavo affrontando lo stesso problema, senza usare scale_y_continuouscoord_cartesian.

Il conflitto proveniva dall'asse x, dove ho definito limits = c(1, 30). Sembra che tali limiti non forniscano abbastanza spazio se vuoi "schivare" le tue barre, quindi R continua a lanciare l'errore

Rimosse 8 righe contenenti valori mancanti (geom_bar)

La regolazione dei limiti dell'asse x per limits = c(0, 31)risolvere il problema.

In conclusione, anche se non stai ponendo limiti al tuo asse y, controlla il comportamento del tuo asse x per assicurarti di avere abbastanza spazio


Questo è così spesso mancato. Dalla stessa persona. Di nuovo dopo un po 'di tempo ... sigh Grazie!
Genom

1

Anche se i dati rientrano nei limiti specificati (ad es. c(0, 335)), L'aggiunta di geom_jitter()un'istruzione potrebbe spingere alcuni punti al di fuori di tali limiti, producendo lo stesso messaggio di errore.

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

Creato il 24-08-2020 dal pacchetto reprex (v0.3.0)


0

Mi sono imbattuto anche in questo, ma nel caso in cui volessi evitare i messaggi di errore aggiuntivi mantenendo l'intervallo fornito. Un'opzione è anche quella di sottoinsieme dei dati prima di impostare l'intervallo, in modo che l'intervallo possa essere mantenuto come preferisci senza attivare avvisi.

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))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.