Ggplot2 चेतावनी के बारे में बताएं: "हटाए गए k पंक्तियों में लापता मान हैं"


89

मुझे यह चेतावनी तब मिलती है जब मैं इसके साथ एक भूखंड बनाने की कोशिश कर रहा हूं ggplot

कुछ समय के लिए ऑनलाइन शोध करने के बाद कई ने सुझाव दिया कि मेरे डेटाबेस में या तो अशक्त मूल्य हैं या सामान्य रूप से लापता डेटा है, जो कि ऐसा नहीं था।

इस प्रश्न में स्वीकृत उत्तर निम्नलिखित कहता है:

चेतावनी का मतलब है कि कुछ तत्व हटा दिए गए हैं क्योंकि वे निर्दिष्ट सीमा से बाहर हैं

मैं सोच रहा था कि वास्तव में इस सीमा का क्या मतलब है और सभी चेतावनी से बचने के लिए कोई व्यक्ति स्वयं इस सीमा को कैसे बढ़ा सकता है?


5
yउस प्रश्न पर अक्ष पर एक सीमा होती है । इस फ़ंक्शन के कारण मान 0 और 0.12 के बीच सीमित हैं:ylim(0,0.12)
LyzandeR

1
एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण प्रश्न का उत्तर देने में मदद करेगा। @ LyzandeR सही रास्ते से नीचे जा रहा है।
vpipkt

जवाबों:


84

जो व्यवहार आप देख रहे हैं, वह इस बात के कारण है कि ggplot2डेटा के साथ कैसे व्यवहार होता है जो भूखंड की धुरी सीमाओं के बाहर होता है। आप इस व्यवहार को इस आधार पर बदल सकते हैं कि क्या आप scale_y_continuous(या, समतुल्य रूप से ylim) का उपयोग करते हैं या coord_cartesianअक्ष श्रेणी निर्धारित करते हैं, जैसा कि नीचे बताया गया है।

library(ggplot2)

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

नीचे दिए गए कोड में, hp = 335 के साथ एक बिंदु भूखंड के y- श्रेणी के बाहर है। इसके अलावा, क्योंकि हम scale_y_continuousy- अक्ष सीमा निर्धारित करते थे , इसलिए यह बिंदु रेखीय प्रतिगमन रेखा जैसे ggplot द्वारा गणना किए गए किसी भी अन्य आँकड़े या सारांश उपायों में शामिल नहीं है।

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

नीचे दिए गए कोड में, hp = 335 के साथ बिंदु अभी भी प्लॉट के y- श्रेणी के बाहर है, लेकिन यह बिंदु फिर भी किसी भी आँकड़े या सारांश उपायों में शामिल है जो ggplot की गणना करता है, जैसे कि रेखीय प्रतिगमन रेखा। ऐसा इसलिए है क्योंकि हमने coord_cartesiany- अक्ष श्रेणी को सेट करने के लिए उपयोग किया था, और यह फ़ंक्शन उन बिंदुओं को बाहर नहीं करता है जो डेटा पर अन्य गणना करने पर प्लॉट श्रेणियों के बाहर हैं।

यदि आप इस और पिछले भूखंड की तुलना करते हैं, तो आप देख सकते हैं कि दूसरे भूखंड में रैखिक प्रतिगमन रेखा में थोड़ी सी ढलान है, क्योंकि प्रतिगमन रेखा की गणना करते समय hp = 335 के साथ बिंदु शामिल है, भले ही वह भूखंड में दिखाई न दे रहा हो ।

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

11

सिर्फ eipi10 द्वारा दिए गए उत्तर को पूरा करने वाले शेक के लिए।

मैं एक ही समस्या का सामना कर रहा था, scale_y_continuousन ही बिना उपयोग के coord_cartesian

संघर्ष एक्स अक्ष से आ रहा था, जहां मैंने परिभाषित किया था limits = c(1, 30)। ऐसा लगता है कि ऐसी सीमाएं पर्याप्त स्थान प्रदान नहीं करती हैं यदि आप अपनी सलाखों को "चकमा" देना चाहते हैं, तो आर अभी भी त्रुटि फेंकता है

गायब मानों वाली 8 पंक्तियाँ (geom_bar) निकाली

limits = c(0, 31)समस्या को हल करने के लिए एक्स अक्ष की सीमा को समायोजित करना ।

अंत में, भले ही आप अपनी y अक्ष में सीमाएं नहीं डाल रहे हों, अपने एक्स अक्ष व्यवहार की जांच करके सुनिश्चित करें कि आपके पास पर्याप्त जगह है


ऐसा अक्सर छूट जाता है। उसी व्यक्ति द्वारा। कुछ समय बाद फिर ... आह धन्यवाद!
जीनोम

1

यहां तक ​​कि अगर आपका डेटा आपकी निर्दिष्ट सीमाओं (जैसे c(0, 335)) के भीतर आता है , तो एक geom_jitter()बयान जोड़ना उन सीमाओं के बाहर कुछ बिंदुओं को धक्का दे सकता है, वही त्रुटि संदेश उत्पन्न कर सकता है।

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 को रेप्रेक्स पैकेज (v0.3.0) द्वारा बनाया गया


0

मैं इसमें भी भाग गया, लेकिन इस मामले में जहां मैं प्रदान की गई सीमा को बनाए रखते हुए अतिरिक्त त्रुटि संदेशों से बचना चाहता था। एक विकल्प सीमा निर्धारित करने से पहले डेटा को कम करने के लिए भी है, ताकि सीमा को चेतावनी ट्रिगर किए बिना आपको पसंद किया जा सके।

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))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.