Ggplot2 uyarısını açıklayın: "Eksik değerleri içeren k satırı kaldırıldı"


90

İle bir arsa oluşturmaya çalışırken bu uyarıyı alıyorum ggplot.

Bir süre çevrimiçi araştırma yaptıktan sonra, birçok kişi veritabanımın genel olarak boş değerler veya eksik veriler içerdiğini öne sürdü, bu durum böyle değildi.

Bu soruda kabul edilen cevap şunları söylüyor:

Uyarı, bazı öğelerin belirtilen aralığın dışında kaldıkları için kaldırıldığı anlamına gelir

Bu aralığın tam olarak neyi ifade ettiğini ve tüm uyarılardan kaçınmak için birisinin bu aralığı manuel olarak nasıl artırabileceğini merak ediyordum.


5
yBu sorunun ekseninde bir sınır var . Bu işlev nedeniyle değerler 0 ile 0,12 arasında sınırlandırılmıştır:ylim(0,0.12)
LyzandeR

1
Tekrarlanabilir bir örnek soruyu yanıtlamaya yardımcı olabilir. @LyzandeR doğru yolda gidiyor gibi görünüyor.
vpipkt

Yanıtlar:


85

Gördüğünüz davranış ggplot2, grafiğin eksen aralıklarının dışındaki verilerle nasıl başa çıkıldığına bağlıdır. Bu davranışı, kullanmanıza scale_y_continuous(veya eşdeğer olarak ylim) veya coord_cartesianeksen aralıklarını ayarlamanıza bağlı olarak aşağıda açıklandığı gibi değiştirebilirsiniz.

library(ggplot2)

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

Aşağıdaki kodda, hp = 335 olan bir nokta, grafiğin y aralığının dışındadır. Ayrıca, scale_y_continuousy ekseni aralığını ayarladığımız için bu nokta, doğrusal regresyon çizgisi gibi ggplot tarafından hesaplanan diğer istatistiklere veya özet ölçülere dahil edilmez.

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

Aşağıdaki kodda, hp = 335 olan nokta hala grafiğin y aralığının dışındadır, ancak yine de bu nokta, doğrusal regresyon çizgisi gibi ggplot'un hesapladığı herhangi bir istatistik veya özet ölçüme dahil edilmiştir. Bunun nedeni coord_cartesian, y ekseni aralığını ayarlamak için kullanmış olmamızdır ve bu işlev, veriler üzerinde başka hesaplamalar yaptığında çizim aralıklarının dışındaki noktaları hariç tutmaz.

Bunu ve önceki grafiği karşılaştırırsanız, ikinci grafikteki doğrusal regresyon çizgisinin biraz daha dik bir eğime sahip olduğunu görebilirsiniz, çünkü grafikte görünmese bile regresyon çizgisi hesaplanırken hp = 335 olan nokta dahil edilir. .

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

12

Sadece eipi10'un verdiği cevabı tamamlama sarsıntısı için.

Ben kullanmadan, aynı sorunla karşı karşıya edildi scale_y_continuousne de coord_cartesian.

Çatışma, tanımladığım x ekseninden geliyordu limits = c(1, 30). Görünüşe göre bu tür sınırlar, çubuklarınızdan "kaçmak" istiyorsanız yeterli alan sağlamıyor, bu nedenle R hala hatayı atıyor

Eksik değerler içeren 8 satır kaldırıldı (geom_bar)

limits = c(0, 31)Sorunu çözmek için x ekseninin sınırlarını ayarlamak .

Sonuç olarak, y ekseninize sınırlar koymasanız bile, yeterli alana sahip olduğunuzdan emin olmak için x ekseninizin davranışını kontrol edin.


Bu çok sık gözden kaçar. Aynı kişi tarafından. Bir süre sonra yine ... ah Teşekkürler!
Genom

1

Verileriniz belirtilen sınırlar dahilinde olsa bile (örneğin c(0, 335)), bir geom_jitter()ifade eklemek bazı noktaları bu sınırların dışına çıkararak aynı hata mesajını oluşturabilir.

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

2020-08-24 tarihinde reprex paketi (v0.3.0) tarafından oluşturuldu


0

Bununla da karşılaştım, ancak sağlanan aralığı korurken fazladan hata mesajlarından kaçınmak istediğim durumda. Ayrıca, aralığı ayarlamadan önce verileri alt küme haline getirme seçeneği de vardır, böylece aralık, uyarıları tetiklemeden istediğiniz gibi tutulabilir.

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))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.