2015-09-10 40 views
28

Tôi nhận được cảnh báo này khi tôi đang cố gắng tạo một ô với ggplot.Giải thích cảnh báo ggplot2: "Đã xóa các hàng k chứa giá trị bị thiếu"

Sau khi nghiên cứu trực tuyến trong một thời gian, nhiều người cho rằng cơ sở dữ liệu của tôi chứa giá trị null hoặc dữ liệu bị thiếu nói chung, không phải như vậy.

In this question câu trả lời chấp nhận nói như sau:

Cảnh báo có nghĩa là một số yếu tố được loại bỏ vì chúng rơi ra khỏi phạm vi chỉ định

tôi đã tự hỏi những gì chính xác không phạm vi này tham khảo và làm cách nào để người nào đó có thể tăng phạm vi này theo cách thủ công để tránh tất cả cảnh báo?

+3

Có giới hạn trên trục 'y' trên câu hỏi đó. Giá trị được giới hạn trong khoảng từ 0 đến 0,12 vì chức năng này: 'ylim (0,0.12)' – LyzandeR

+1

Ví dụ có thể tái sản xuất sẽ giúp trả lời câu hỏi. @LyzandeR dường như đang đi đúng hướng. – vpipkt

Trả lời

33

Hành vi bạn thấy là do cách ggplot2 xử lý dữ liệu nằm ngoài phạm vi trục của ô. Bạn có thể thay đổi hành vi này tùy thuộc vào việc bạn sử dụng scale_y_continuous (hoặc tương đương, ylim) hoặc coord_cartesian để đặt phạm vi trục, như được giải thích bên dưới.

library(ggplot2) 

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

Trong mã bên dưới, một điểm với hp = 335 nằm ngoài phạm vi y của ô. Ngoài ra, vì chúng tôi đã sử dụng scale_y_continuous để đặt phạm vi trục y, điểm này không được bao gồm trong bất kỳ số liệu thống kê hoặc tóm tắt nào khác được tính bằng ggplot, chẳng hạn như đường hồi quy tuyến tính.

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

Trong đoạn mã dưới đây, điểm với hp = 335 vẫn nằm ngoài y tầm xa của cốt truyện, nhưng thời điểm này là vẫn có trong bất kỳ thống kê hoặc các biện pháp tóm tắt rằng ggplot tính toán, chẳng hạn như hồi quy tuyến tính hàng. Điều này là do chúng tôi đã sử dụng coord_cartesian để đặt phạm vi trục y và chức năng này không loại trừ các điểm nằm ngoài phạm vi ô khi thực hiện các phép tính khác trên dữ liệu. Nếu bạn so sánh này và cốt truyện trước đó, bạn có thể thấy rằng đường hồi quy tuyến tính trong ô thứ hai có độ dốc hơi dốc hơn, bởi vì điểm có hp = 335 được bao gồm khi tính toán đường hồi quy, mặc dù nó không hiển thị trong cốt truyện.

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

Chỉ để rung hoàn thành câu trả lời được đưa ra bởi eipi10.

Tôi đang gặp phải sự cố tương tự, không sử dụng scale_y_continuous cũng không phải coord_cartesian.

Xung đột đến từ trục x, nơi tôi đã xác định limits = c(1, 30). Có vẻ như giới hạn như không cung cấp đủ không gian nếu bạn muốn "né" thanh của bạn, vì vậy R vẫn ném lỗi

Removed 8 hàng chứa các giá trị thiếu (geom_bar)

Điều chỉnh giới hạn của trục x đến limits = c(0, 31) đã giải quyết được sự cố.

Tóm lại, ngay cả khi bạn không đặt giới hạn cho trục y, hãy kiểm tra hành vi trục x để đảm bảo bạn có đủ không gian

Các vấn đề liên quan