2010-08-03 17 views
22

मैं एक ऐसा फ़ंक्शन लिखने की कोशिश कर रहा हूं जो एकाधिक पृष्ठों पर एक ggplot facet_wrap प्लॉट प्लॉट करता है। यह सिर्फ एक हैक है, क्योंकि यह सुविधा ggplot2 सुविधा टू-डू सूची पर प्रतीत होती है। मैं उन पृष्ठों की संख्या को खोजने के लिए कुछ छोटी गणना करता हूं जिनकी मुझे आवश्यकता है, मेरे data.frame की पंक्तियों की संख्या जो मुझे प्रति पृष्ठ आदि की आवश्यकता है। मुझे यह सब काम है।आर + जीजीप्लॉट: एकाधिक पृष्ठों पर प्लॉटिंग

pdf(filename) 
for (i in seq(num_pages)){ 
    slice = seq(((i-1)*num_rows)+1,(i*num_rows)) 
    slice = slice[!(slice > nrow(df.merged))] 
    df.segment=df.merged[slice,] 
    p <- ggplot(df.segment, aes(y=mean,x=phenotype)) 
    p <- p + geom_bar(stat="identity",fill="white",colour="black") 
    p + facet_wrap("ID",scales="free_y",ncol=n_facets,nrow=n_facets) 
} 
dev.off() 

मेरे समस्या यह है कि, इस तरह पाश के लिए एक में यह सब लपेटकर, pdf() और dev.off() कार्यों के बीच में से, यह है कि पाश के लिए ggplot के लिए इंतजार करना अपनी बात करने के लिए प्रतीत नहीं होता है और अपने लूप के माध्यम से बहुत तेजी से चमकता है और एक अवैध पीडीएफ आउटपुट करता है।

अगर मैं i = 1 निर्धारित करते हैं, pdf() शुरू, पाश के लिए अंदर से ऊपर कोड चलाने के लिए, तो i=2 निर्धारित करते हैं, तो कोड चलाने के लिए, और इतने जब तक मैं पाने पर ऊब (i=3) फिर डिवाइस जिसके परिणामस्वरूप पीडीएफ है बंद कर देते हैं प्रतिभाशाली।

क्या कोई तरीका है कि मैं लूप के लिए अगली पुनरावृत्ति पर जाने से पहले अंतिम पंक्ति के लिए साजिश समाप्त करने के लिए प्रतीक्षा कर सकता हूं?

उत्तर

29

मुझे लगता है कि समस्या यह है कि आपको लूप के अंदर डिवाइस पर वास्तव में प्रिंट करने के लिए अपनी अंतिम पंक्ति (पी + ...) के आसपास प्रिंट() की आवश्यकता है। । ।

+0

वाह जो पूरी तरह से काम करता है। मुझे नहीं पता था कि प्रिंट इस तरह इस्तेमाल किया जा सकता है। –

+0

ऐसा इसलिए है क्योंकि 'p' एक वस्तु है। आपके कोड की अंतिम पंक्ति 'p' ऑब्जेक्ट को संशोधित करती है, लेकिन फिर आप इसे डिवाइस पर प्रिंट (') करना चाहते हैं। – JoFrhwld

+0

हाँ, यह एक आम बाधा है। कभी-कभी मैं ggplot2 में एक फ़ंक्शन लिखता हूं, और अंतिम भाग के आस-पास 'प्रिंट() 'छोड़ देता हूं, इसलिए कोई आउटपुट नहीं मिलता ... – aL3xa

4

बिल्कुल। Ggplot2 पुस्तक का पृष्ठ 3 हमें बताता है कि जब आप ggplot2 ऑब्जेक्ट्स बनाते हैं, तो आप प्रिंट() के साथ स्क्रीन पर इसे प्रस्तुत कर सकते हैं। यह अंतःक्रियात्मक रूप से चलते समय स्वचालित रूप से होता है, लेकिन लूप या फ़ंक्शन के अंदर, आपको प्रिंट करना होगा() तुम्हरे द्वारा"।

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