2011-08-11 18 views
35

ggplot2 की हाल ही में कुछ साफ उपयोग करता आए हैं, और या तो आंशिक या पूर्ण समाधान तैनात किया गया है:ggplot2 को ठीक से विस्तारित करना?

ggheat क्योंकि यह नहीं बल्कि उल्लेखनीय है किसी ऑब्जेक्ट को वापस करने की बजाय साजिश करके ggplot रूपक को तोड़ देता है।

घुंघराले ब्रेस समाधान उल्लेखनीय हैं क्योंकि कोई वास्तव में ggplot2 उच्च स्तरीय अवधारणा में फिट नहीं होता है (उदाहरण के लिए आपको उन बिंदुओं की एक श्रृंखला निर्दिष्ट करनी चाहिए जिन्हें आप तोड़ना चाहते हैं, और फिर कहीं और आप चाहते हैं कि भौगोलिक निर्दिष्ट करने में सक्षम हो वह सीमा प्रदर्शित - ब्रेस, बॉक्स, बैंगनी गाय, आदि)।

ggplot2 book (जो मैं जल्द ही आदेश दूंगा और 2 ऑनलाइन अध्याय पढ़ता हूं) नए लिखने या मौजूदा रूप से विस्तारित करने के बजाय व्याकरण और कार्यों का उपयोग करने के बारे में प्रतीत होता है।

मैं एक विशिष्ट सुविधा जोड़ने या एक नया geom विकसित करना सीखना चाहता हूं, और इसे ठीक से कर सकता हूं। ggplot2 एक सामान्य ग्राफिक्स पैकेज के रूप में इस तरह से नहीं बनाया जा सकता है कि grid या बेस ग्राफिक्स हैं, लेकिन ऐसे कई ग्राफ हैं जो मौजूदा ggplot2 geom से केवल एक चरण या दो एक्सटेंशन हैं। जब ये परिस्थितियां आती हैं, तो मैं आम तौर पर एक बार कुछ करने के लिए पर्याप्त वस्तुओं को एक साथ रख सकता हूं, लेकिन अगर मुझे एक ही साजिश की आवश्यकता कुछ दर्जन बार हो तो क्या होगा? क्या होगा यदि अन्य लोग इसे पसंद करते हैं और इसका उपयोग करना चाहते हैं - अब उन्हें उस ग्राफ को हर बार उसी प्रक्रिया के माध्यम से गुजरना होगा। ऐसा लगता है कि उचित समाधान stat_heatplot और geom_heatplot में जोड़ने के लिए है, या Tufte box plots आदि के लिए geom_Tuftebox जोड़ने के लिए है, फिर भी मैंने कभी भी ggplot2 को विस्तारित करने का एक उदाहरण नहीं देखा है; इसका उपयोग कैसे करें इसके उदाहरण।

ggplot2 में गहराई से खोदने और इसे विस्तारित करने के लिए कौन से संसाधन मौजूद हैं? मैं ऊपर वर्णित अक्ष पर एक सीमा निर्दिष्ट करने के लिए एक उच्च स्तरीय तरीके से विशेष रूप से रूचि रखता हूं, लेकिन जीजीप्लॉट 2 टिक के बारे में सामान्य ज्ञान भी स्वागत है।

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

+19

दुर्भाग्यवश मेरी आर स्थापना पर 'makeMeHadley() 'फ़ंक्शन टूटा हुआ है। शायद अगर मैंने 'make_me_hadley() 'की बजाय कोशिश की? –

+2

मैंने एक्सटेंशन के विभिन्न विचारों को सूचीबद्ध करने के लिए ggplot2 विकी में एक [विशलिस्ट पृष्ठ] (https://github.com/hadley/ggplot2/wiki/wishlist---feature-requests) जोड़ा है। – baptiste

+1

@ एरिब। फ्राइडमैन: क्या यह एक आदेश है, या एक अनुरोध है? और यह किसके लिए निर्देशित है? : पी – naught101

उत्तर

23

ggplot2 धीरे-धीरे अधिक से अधिक एक्स्टेंसिबल बन रहा है। विकास संस्करण, https://github.com/hadley/ggplot2/tree/develop, roxygen2 (दो अलग-अलग होमग्राउन सिस्टमों के बजाए) का उपयोग करता है, और प्रोटोटा से सरल एस 3 कक्षाओं (वर्तमान में कॉर्ड और स्केल के लिए पूर्ण) में स्विच शुरू कर दिया है। इन दो परिवर्तनों को उम्मीद है कि स्रोत कोड को समझना आसान हो जाएगा, और इसलिए दूसरों के विस्तार के लिए आसान है (इस तथ्य से बैकअप कि ggplot2 के लिए अनुरोध खींचना बढ़ रहा है)।

एक और बड़ा सुधार जो अगले संस्करण में शामिल किया जाएगा, गाइड सिस्टम (https://github.com/kohske/ggplot2/tree/feature/new-guides-with-gtable) में कोहस्का ताकाहाशी के सुधार है। साथ ही साथ डिफ़ॉल्ट गाइड (जैसे सुरुचिपूर्ण निरंतर रंगीन सलाखों के साथ) में सुधार, उनके परिवर्तन भी आपके स्वयं के कस्टम किंवदंतियों और अक्षों के साथ डिफ़ॉल्ट को ओवरराइड करना आसान बनाता है। यह अक्षों में घुंघराले ब्रेसिज़ को आकर्षित करना संभव बनाता है, जहां वे शायद संबंधित हैं।

परिवर्तनों का अगला बड़ा दौर (जो शायद मैं ग्रीष्मकालीन 2012 तक निपटने में सक्षम नहीं होगा) में परत पैकेज (https://github.com/hadley/layers) में स्केच की तर्ज पर भूगर्भ, आंकड़े और स्थिति समायोजन की पुनरावृत्ति शामिल होगी। । यह भूगोल, आंकड़े और स्थिति समायोजन को लिखना बहुत आसान बनाना चाहिए, और आशा है कि अधिक समुदाय योगदान जैसे कि geom_tufteboxplot को बढ़ावा मिलेगा।

+1

इस तरह के ध्वनि 1.1.0 में सफल हो जाएगा। धन्यवाद @ हैडली और बाकी ggplot2 टीम। ऐसा लगता है कि विग्नेट ("विस्तार-जीजीप्लॉट 2") बताएगा कि कैसे विस्तार किया जाए। –

+1

आधिकारिक विस्तार तंत्र अब 2.0.0 http://blog.rstudio.org/2015/12/21/ggplot2-2-0-0/ में उपलब्ध है –

5

आप इसे क्यों विस्तारित करना चाहते हैं? प्रेरणा क्या है? जैसा कि मैंने इसे देखा है ggplot2 एक उच्च स्तरीय ग्राफिक्स पैकेज होने के लिए बनाया गया है जो किसी विशेष डेटा सेट से अच्छे आंकड़े तैयार करने के लिए डिज़ाइन किया गया है। और चीजों को सही करें और अन्य चीजों को आसान बनाएं: जैसे तराजू, किंवदंतियों आदि ggplot2 एक सामान्य उद्देश्य ग्राफिक्स टूल-किट नहीं है। जाली की तरह यह दिमाग में एक विशेष प्रतिमान है और आप इसका उद्देश्य उस उद्देश्य के लिए उपयोग करते हैं।

ग्रिड अंतर्निहित चित्रमय टूलकिट आप सामान्य प्रयोजन, अनुकूलित अंकन करने के लिए उपयोग करना चाहते हैं। और आईआईआरसी, जाली या ggplot2 प्लॉट/ऑब्जेक्ट्स, इस तरह के मनमाने ढंग से नोटेशन/एनोटेशन इत्यादि के लिए ग्रिड ग्रब्स को जोड़ना अपेक्षाकृत आसान है।

क्या बहुत ज्यादा अर्थ प्रदान कर रहा है ggplot2 या जाली लाइनों आप सोच रहे हैं के साथ नहीं है। मुझे नहीं लगता कि ggplot2 गर्मी के रूप में क्यों नहीं कर सकता है? या मुझसे यहां कुछ छूट रहा है?

बहुत उपयोगी होगा क्या होगा अगर ggplot2 या जाली की डाटा प्रोसेसिंग हिम्मत दूसरों के शीर्ष पर वास्तविक अंकन कोड लिखने के लिए उपलब्ध होने पर होता। हैडली ने पहले कहीं इसका उल्लेख किया है।

ggplot2, विशेष रूप से, और जाली काफी मुश्किल कोड में/पढ़ को समझने के लिए मिल रहे हैं। ggplot2 ओओपी के एक संस्करण के लिए प्रोटो पैकेज का उपयोग करता है, जिसका अर्थ है कि आपको यह समझने की आवश्यकता है कि यह क्या कर रहा है और ggplot2 अर्थशास्त्र। जाली समान है क्योंकि वहां की भाषा पर बहुत अधिक कंप्यूटिंग है, यदि आप उस तरह के आर प्रोग्रामिंग से परिचित नहीं हैं, तो बहुत डरावना, चुनौतीपूर्ण और अभेद्य हो सकता है! http://www.stat.auckland.ac.nz/~paul/RG2e/

संपादित करें:: बिंदु मैं भर में प्राप्त करने के लिए इच्छुक था कि था

ग्रिड के लिए, मैं सुझाव है कि आप पॉल मुरेल के आर ग्राफिक्स पुस्तक को देखो, जिनमें से एक दूसरा संस्करण प्रकाशक के साथ है ggplot2 और जाली जैसे संकुल द्वारा प्रदान किए गए इंटरफेस जरूरी उच्च स्तर हैं। उन्हें विस्तारित करना तब तक ठीक है जब तक वे उपयोग में प्रतिमान/दर्शन के साथ चिपके रहते हैं। मौजूदा भूगों का उपयोग करके हीटप्लॉट पहले से ही बनाया जा सकता है; ggplot प्रणाली के दर्शन का हिस्सा प्रदर्शन/प्रस्तुति से डेटा को अलग करना है, और वांछित प्रदर्शन का उत्पादन करने के लिए दिलचस्प तरीकों से भूगोल का उपयोग करना है।

रैपिंग बेस ggplot + geom एक और उपयोगकर्ता के अनुकूल फ़ंक्शन में कॉल करता है तब तक ठीक है जब तक i) यह ggplot पहले से ही करता है और एक ऑब्जेक्ट देता है, और ii) इसमें कोई इंटरफ़ेस नहीं है जो बहुत अलग है रास्ता ggplot काम करता है। डेवलपर्स जो भी कोड चाहते हैं उसे लिखने के लिए स्वतंत्र हैं, यह व्यापक समुदाय के लिए रैपर प्रदान करने में मददगार नहीं है जो मूल के कामकाज से बहुत दूर चले जाते हैं। इससे उपयोगकर्ता के हिस्से पर भ्रम पैदा होता है और ggplot2 के बारे में सीखने को बढ़ावा नहीं देता है।

गतिशील स्थिति विचार दिलचस्प है; आप इन विचारों को सभी साजिश पैकेजों में शामिल कर सकते हैं। आप इसे भौगोलिक रूप से बोल्ट कर सकते हैं, या वैकल्पिक रूप से बाहरी फ़ंक्शन के रूप में जो इनपुट समन्वय को संशोधित कर सकते हैं ताकि एक नई डेटा ऑब्जेक्ट उत्पन्न हो सके जो प्रासंगिक भौगोलिक द्वारा उपयोग किया जा सके। वही फ़ंक्शन अन्य प्लॉटिंग पैकेजों के लिए उपयोग किया जा सकता है - इसे ggplot-specific होने की आवश्यकता नहीं होगी।

+0

पहले मुरेल की पुस्तक नहीं देखी गई थी। जब मैं ग्रिड आंतरिक के साथ मिल रहा था तो यह आसान होता। अपने कुछ बिंदुओं को संबोधित करने के लिए स्पष्ट प्रश्न। –

+2

मुझे लगता है कि आप पाएंगे कि हैडली जीजीप्लॉट के कुछ तत्वों को सामान्य उद्देश्य टूलकिट में बदलने के लिए बहुत सारे काम कर रही है। विशेष रूप से, बुद्धिमान तराजू उत्पन्न करने का काम एक बहुत ही कठिन समस्या है। इसलिए इस समय बहुत सारे काम हो रहे हैं ताकि जीजीप्लॉट स्केल सामान्य प्रयोजन उपकरण के रूप में उपलब्ध हो सकें, उदाहरण के लिए, जाली। (उदाहरण के लिए, ggplot2 मेलिंग सूची http://groups.google.com/group/ggplot2/browse_thread/thread/8f5a1a7513ef0042) पर यह चर्चा देखें, – Andrie

+0

@Andrie - विशिष्टताओं और लिंक के लिए धन्यवाद। मैंने इसके बिट्स देखे थे, लेकिन मेरे हाथों/मस्तिष्क को उनके ऊपर नहीं रख सका, इसलिए मेरे जवाब में गैर-कमजोर था कि हैडली ने क्या कहा था कि वह करेगा/कर रहा था। दूसरों के लिए उपलब्ध ggplot2 के कुछ चालाक आंतरिक बनाना वास्तव में एक बहुत ही उपयोगी योगदान होगा। –

8

मुझे यकीन नहीं है कि मैं आपके विश्लेषण से सहमत हूं। मैं समझाऊंगा कि क्यों, और फिर आपको अपने स्वयं के भूगर्भ लिखने के लिए कुछ संसाधनों के बारे में बताएगा।

ggheat

जहां तक ​​मेरा बता सकते हैं, ggheat वर्ग ggplot की एक वस्तु देता है। इस प्रकार यह एक विशिष्ट उपयोग मामले के लिए अनुकूलित ggplot के आसपास एक सुविधाजनक wrapper है। हालांकि qplot अधिक सामान्य है, यह सिद्धांत रूप में एक ही बात है: यह ggplot के आसपास एक रैपर है जो डेटा के बारे में कुछ सूचित अनुमान बनाता है और समझदार डिफ़ॉल्ट चुनता है।हैडली ने साजिश कार्यों पर कॉल किया है और इसे ggplot2 पुस्तक के पृष्ठ 181 पर संक्षिप्त रूप से वर्णित किया गया है।

घुंघराले ब्रेसिज़

घुंघराले ब्रेस समाधान वास्तव में क्या ggplot दर्शन कहते है, प्रस्तुति से अर्थात अलग डेटा। इस मामले में, डेटा को थोड़ा कस्टम फ़ंक्शन द्वारा उत्पन्न किया जाता है और data.frame में संग्रहीत किया जाता है। इसके बाद इसे एक geom का उपयोग करके प्रदर्शित किया जाता है जो समझ में आता है, यानी geom_line

क्वॉ वाडिस?

आपने नोट किया है (r chat room में) कि आप घुंघराले ब्रेसिज़ को साजिश करने के लिए एक और सामान्य दृष्टिकोण रखना पसंद करेंगे। निम्नलिखित लाइनों के साथ कुछ (और मैं व्याख्या और एक ही समय में विस्तार):

बाउंडिंग बॉक्स निर्देशांक के रूप में
  • आपूर्ति डेटा (यानी x0, x1, Y0 और y1)
  • एक "आंकड़ा निर्दिष्ट करें ", इस तरह के जो भी ब्रेस, बॉक्स के रूप में या
  • , एक geom निर्दिष्ट इस तरह के geom_custom_shape

के रूप में यह एक अच्छा सामान्यीकरण और घुंघराले ब्रेस समाधान के पीछे एक विचार विस्तार की तरह लगता है, और स्पष्ट रूप से एक नया geom लेखन की आवश्यकता होती है होगा । एक आधिकारिक ggplot wiki है, जहां आप creating a new geom के लिए निर्देश प्राप्त कर सकते हैं।

+1

+1 और स्वीकार करें, एक नया भूगोल पृष्ठ बनाने के लिंक के लिए, जो स्वयं 'प्रोटो' पर कुछ अच्छे संदर्भों से जुड़ा हुआ है, जिसमें से @ गैविन ने महत्व को समझाया। –

+0

क्या ऊपर से जुड़ा निर्देश एक नया भूगोल अद्यतित करने के लिए हैं? और सीआरएएन को जमा किए जाने वाले पैकेजों में नए भूगर्भ शामिल करने के लिए अनुशंसित अभ्यास क्या है? –