2013-04-26 5 views
15

किसी कारण है कि इस काम करता है व्याख्या कर सकते हैं:व्यवहार और तराजू = गुम डेटा के साथ "मुक्त"

d <- data.frame(x = 1:10, y = as.numeric(c(1:4,rep(NA,6))),z=rep(1:5,2)) 
ggplot(data = d, aes(x, y)) + geom_point() +facet_grid(z~.) 

और जब facet_grid को scales="free" जोड़ने में कोई त्रुटि फेंक दिया जाता है:

d <- data.frame(x = 1:10, y = as.numeric(c(1:4,rep(NA,6))),z=rep(1:5,2)) 
ggplot(data = d, aes(x, y)) + geom_point() +facet_grid(z~.,scales="free") 

# Error in seq.default(from = best$lmin, to = best$lmax, by = best$lstep) : 
# 'from' must be of length 1 

शायद इसे इस्तेमाल करता है scales जब सभी पहलुओं का न्यूनतम और अधिकतम नहीं है। जब scales निःशुल्क है तो यह नहीं पता कि पहलू के लिए कौन सा मूल्य लेना है जिसमें केवल मिसाल हैं?

क्या कोई काम-आसपास है?

+0

'y' को कारक की मदद करने के लिए मजबूर करना, लेकिन शायद कुछ अवांछित परिणाम भी हैं। – joran

+0

शायद इस उदाहरण में। लेकिन मेरा 'वाई अक्ष' प्रतिशत में है। – JT85

+2

उस स्थिति में मैं केवल डेटा फ्रेम से गुम मूल्यों के साथ पंक्तियों को छोड़ दूंगा, और फिर साजिश। – joran

उत्तर

3

मैंने दो समाधान देखा।

1)

ggplot(data = d, aes(x, y)) + 
    geom_point() + 
    facet_grid(z~.,scales="free_x") 

काम करता है, लेकिन scales="free" हिस्सा बिना के रूप में एक ही परिणाम देता है।

2)

library(gridExtra) 
p1 <- ggplot(data = d[d$z==1,], aes(x, y)) + geom_point() 
p2 <- ggplot(data = d[d$z==2,], aes(x, y)) + geom_point() 
p3 <- ggplot(data = d[d$z==3,], aes(x, y)) + geom_point() 
p4 <- ggplot(data = d[d$z==4,], aes(x, y)) + geom_point() 
p5 <- ggplot(data = d[d$z==5,], aes(x, y)) + geom_point() 
grid.arrange(p1,p2,p3,p4,p5,ncol=1) 

यह काम नहीं करता। प्लॉट्स को अलग-अलग प्लॉट करते समय, आपको पता चलेगा कि p5 प्लॉट नहीं किया जा सकता है। यह इस तथ्य के कारण है कि z=5y के लिए केवल एनए है।

केवल एनए के बहुत ही तार्किक नहीं होने पर एक मुक्त पैमाने का उपयोग करने की कोशिश कर रहा है। यह मेरी राय में वैचारिक समस्या है। इसका कारण यह है कि scales="free" तर्क का उपयोग किए बिना, अन्य सबप्लॉट के पैमाने का उपयोग किया जाता है। scales="free" तर्क (या free_x या free_y) का उपयोग करते समय, प्रत्येक सबप्लॉट के तराजू पैमाने की लंबाई के अनुसार सेट किए जाएंगे। जब केवल एनए होते हैं, तो पैमाने की लंबाई निर्धारित नहीं की जा सकती है जो बदले में त्रुटि संदेश का कारण बनती है।

यही कारण है कि free_x काम करता है (हालांकि यह वही परिणाम देता है)।

निष्कर्ष निकालने के लिए: जब आपके समूहों में से एक केवल एनए है, तो आप अपनी साजिश में scales="free" का उपयोग नहीं कर सकते। नतीजतन, आपके पास दो विकल्प हैं (मेरी राय में):

  • scales="free" आपके वांछित खाली सबप्लॉट प्राप्त करने के लिए तर्क को छोड़कर।
  • एनए को 0 के साथ बदलना, लेकिन यह केवल एक समाधान है जब आपके पास ऋणात्मक मान नहीं हैं।
+0

आपके प्रयास के लिए धन्यवाद, लेकिन यह समस्या का समाधान नहीं करता है। यह तार्किक होने की बात नहीं है या नहीं। कुछ मामलों में यह दिखाने के लिए वांछित किया जा सकता है कि एक निश्चित पहलू खाली है। साथ ही यदि आप डेटा पर मानक रिपोर्टिंग करते हैं जो समय-समय पर बदलता है तो एक खाली पहलू त्रुटि का कारण बनता है। – JT85

+0

@ जेटी 85 मुझे लगता है कि यह एक वैचारिक समस्या है। मैंने इसे समझाने के लिए अपना जवाब अपडेट किया। – Jaap

-2

हम सिर्फ इस समस्या को हल कर सकते हैं और स्रोत था हम सूत्र में छोटे एक्स के बजाय राजधानी एक्स उपयोग कर रहे थे, गलत एक है: ggplot (isotidy, एईएस (एक्स = साइट, y = dN_fish , = साइट को भरने)) + geom_boxplot() और नीचे की तरह माना जाता है: ggplot (isotidy, एईएस (x = साइट, y = dN_fish, = साइट को भरने)) + geom_boxplot()

मैं इस आशा मदद

0

आप na.omit (डेटाफ्रेम) का भी उपयोग कर सकते हैं। यह मेरे लिए काम किया। मेरे पास डेटा की 722 के पंक्तियों में केवल एक (!) एनए था। यह त्रुटि प्राप्त करने के लिए पर्याप्त था।

संबंधित मुद्दे