Jelaskan peringatan ggplot2: "K baris yang dihapus berisi nilai yang hilang"

90

Saya mendapatkan peringatan ini saat mencoba membuat plot dengan ggplot.

Setelah meneliti online untuk beberapa saat banyak yang menyarankan bahwa database saya berisi nilai null atau data yang hilang secara umum, yang sebenarnya tidak terjadi.

Dalam pertanyaan ini jawaban yang diterima mengatakan sebagai berikut:

Peringatan tersebut berarti bahwa beberapa elemen dihapus karena berada di luar kisaran yang ditentukan

Saya bertanya-tanya apa sebenarnya maksud kisaran ini dan bagaimana seseorang dapat secara manual meningkatkan kisaran ini untuk menghindari semua peringatan?

ksm001
sumber
5
Ada batasan pada ysumbu pada pertanyaan itu. Nilai dibatasi antara 0 dan 0,12 karena fungsi ini:ylim(0,0.12)
LyzandeR
1
Contoh yang dapat direproduksi akan membantu menjawab pertanyaan tersebut. @LyzandeR tampaknya mengambil jalur yang benar.
vpipkt

Jawaban:

85

Perilaku yang Anda lihat disebabkan oleh cara ggplot2menangani data yang berada di luar rentang sumbu plot. Anda dapat mengubah perilaku ini bergantung pada apakah Anda menggunakan scale_y_continuous(atau, secara ekuivalen, ylim) atau coord_cartesianuntuk menyetel rentang sumbu, seperti yang dijelaskan di bawah ini.

library(ggplot2)

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

Pada kode di bawah ini, satu titik dengan hp = 335 berada di luar rentang y plot. Selain itu, karena kami biasa scale_y_continuousmenyetel rentang sumbu y, titik ini tidak disertakan dalam statistik atau ukuran ringkasan lainnya yang dihitung oleh ggplot, seperti garis regresi linier.

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

Pada kode di bawah ini, titik dengan hp = 335 masih berada di luar rentang y dari plot, tetapi titik ini tetap disertakan dalam statistik atau ukuran ringkasan yang dihitung ggplot, seperti garis regresi linier. Ini karena kami biasa coord_cartesianmenyetel rentang sumbu y, dan fungsi ini tidak mengecualikan titik yang berada di luar rentang plot saat melakukan penghitungan lain pada data.

Jika Anda membandingkan ini dan plot sebelumnya, Anda dapat melihat bahwa garis regresi linier pada plot kedua memiliki kemiringan yang sedikit lebih curam, karena titik dengan hp = 335 disertakan saat menghitung garis regresi, meskipun tidak terlihat di plot .

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

Hanya demi menyelesaikan jawaban yang diberikan oleh eipi10.

Saya menghadapi masalah yang sama, tanpa menggunakan scale_y_continuousnor coord_cartesian.

Konflik itu berasal dari sumbu x, yang saya definisikan limits = c(1, 30). Sepertinya batasan tersebut tidak memberikan ruang yang cukup jika Anda ingin "menghindari" bar Anda, jadi R tetap memberikan kesalahan

8 baris yang dihapus berisi nilai yang hilang (geom_bar)

Menyesuaikan batas sumbu x untuk limits = c(0, 31)menyelesaikan masalah.

Kesimpulannya, bahkan jika Anda tidak membatasi sumbu y Anda, periksa perilaku sumbu x Anda untuk memastikan Anda memiliki cukup ruang

davidnortes
sumber
Ini sering kali terlewat. Oleh orang yang sama. Sekali lagi setelah beberapa waktu ... desah Terima kasih!
Genom
1

Bahkan jika data Anda berada dalam batas yang ditentukan (misalnya c(0, 335)), menambahkan geom_jitter()pernyataan dapat mendorong beberapa poin keluar dari batas tersebut, menghasilkan pesan kesalahan yang sama.

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

Dibuat pada 2020-08-24 oleh paket reprex (v0.3.0)

Todd
sumber
0

Saya mengalami ini juga, tetapi dalam kasus di mana saya ingin menghindari pesan kesalahan tambahan sambil menjaga jarak yang disediakan. Opsi juga untuk membuat subset data sebelum menyetel rentang, sehingga rentang dapat disimpan sesuka Anda tanpa memicu peringatan.

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