ggplot

2012-11-08 24 views
37

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

library(ggplot2) 
library(reshape2) 
mydf <- data.frame(
    species = sample(c("A", "B"), 100, replace = TRUE), 
    lvl = factor(sample(1:3, 100, replace = TRUE)) 
) 
labs <- melt(with(mydf, table(species, lvl))) 
names(labs) <- c("species", "lvl", "value") 
labs[3, "value"] <- NA 
ggplot(mydf, aes(x = species)) + 
    stat_bin() + 
    geom_text(data = labs, aes(x = species, y = value, label = value, vjust = -0.5)) + 
    facet_wrap(~ lvl) 

enter image description here

हम लपेट पिछले अभिव्यक्ति के आसपास suppressWarnings, तो हम कितने चेतावनी वहाँ थे का एक सारांश मिलता है। तर्क के लिए, मान लें कि यह स्वीकार्य नहीं है (लेकिन वास्तव में बहुत ईमानदार और सही है)। Ggplot2 ऑब्जेक्ट को प्रिंट करते समय चेतावनी को पूरी तरह से कैसे दबाएं?

+2

आपके द्वारा रिपोर्ट का उल्लेख के बाद से: आप knitr में चेतावनी उत्पादन को दबाने कर सकते हैं। –

+0

धन्यवाद @DieterMenne मैं इस विकल्प का भी पता लगाऊंगा। आप कैसे जानते थे कि मैं एक बुनाई प्रशंसक था? :) –

उत्तर

30

एक अधिक लक्षित साजिश दर- साजिश दृष्टिकोण आपकी साजिश कॉल में na.rm=TRUE जोड़ना होगा। उदा .:

ggplot(mydf, aes(x = species)) + 
     stat_bin() + 
     geom_text(data = labs, aes(x = species, y = value, 
           label = value, vjust = -0.5), na.rm=TRUE) + 
     facet_wrap(~ lvl) 
+2

+1 अच्छा जवाब। चेतावनियों को दबाने के बजाए चेतावनियों के मूल कारण को संबोधित करने और इनसे निपटने के लिए हमेशा बेहतर होता जा रहा है। – Andrie

+0

+1 @Andrie के साथ सहमत हैं, हालांकि मुझे लगता है कि यह गुम मूल्यों के बारे में चेतावनी प्राप्त करने के लिए आश्वस्त है - इससे मुझे यह जांचने में मदद मिलती है कि यह सही काम कर रहा है। ऐसा नहीं है कि मैं निश्चित रूप से हैडली पर भरोसा नहीं करता हूं। –

+0

सभी अच्छे विकल्प, लेकिन यह एक पुरस्कार लेता है। –

38

आप print() कॉल, नहीं ggplot() वस्तु के निर्माण के चारों ओर suppressWarnings() की जरूरत है:

R> suppressWarnings(print(
+ ggplot(mydf, aes(x = species)) + 
+ stat_bin() + 
+ geom_text(data = labs, aes(x = species, y = value, 
+        label = value, vjust = -0.5)) + 
+ facet_wrap(~ lvl))) 
R> 

यह एक वस्तु के लिए अंतिम साजिश और उसके बाद print() आवंटित करने के लिए आसान हो सकता है।

plt <- ggplot(mydf, aes(x = species)) + 
    stat_bin() + 
    geom_text(data = labs, aes(x = species, y = value, 
           label = value, vjust = -0.5)) + 
    facet_wrap(~ lvl) 


R> suppressWarnings(print(plt)) 
R> 

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

R> suppressWarnings(plt) 
Warning message: 
Removed 1 rows containing missing values (geom_text). 

काम नहीं करता, क्योंकि प्रभाव में, आप print(suppressWarnings(plt)) बुला रहे हैं, जबकि

R> suppressWarnings(print(plt)) 
R> 

करता काम क्योंकि suppressWarnings() से उत्पन्न होने वाली चेतावनी पर कब्जा कर सकते हैं print() कॉल करें।

+0

दिलचस्प है कि 'प्रिंट' को स्पष्ट रूप से कॉल करने के तरीके को कैसे बुलाया जाता है, लेकिन जब यह 'ggplot' को कॉल करके और किसी ऑब्जेक्ट को असाइन नहीं किया जाता है तो यह पूर्ण रूप से किया जाता है। –

+1

@ RomanLuštrik ऐसा इसलिए है क्योंकि वास्तविक कॉल 'प्रिंट (suppressWarnings (plt)) की तरह कुछ है, जहां आप' suppressWarnings (print (plt)) चाहते हैं, या क्या आपको इसका मतलब याद आया? –

+0

हां, आपने इसे खींचा है। मैंने इस बारे में पर्याप्त नहीं सोचा कि प्रिंट को कैसे स्पष्ट रूप से बुलाया जा रहा है। –

21

अपने प्रश्न में, आप रिपोर्ट लेखन का उल्लेख है, तो यह बेहतर हो सकता है वैश्विक चेतावनी स्तर सेट करने के:

options(warn=-1) 

डिफ़ॉल्ट है:

options(warn=0)