2013-02-27 19 views
21

मैं ggplot में facet_wrap और facet_grid का उपयोग कर, जैसी चीजों की साजिश रचने कर रहा हूँ? क्या यह iris डेटाफ्रेम को बदलने या नया बनाने के बिना किया जा सकता है? यहां डिफ़ॉल्ट रूप से सेटोसा, वर्सीकलर, वर्जिनिका दिखाता है लेकिन मुझे एक अलग ऑर्डर चाहिए। धन्यवाद।

+1

शायद 'facet_grid (कारक, प्रजातियां, स्तर = सी ("वर्जिनिका", "सेटोसा", "versicolor")) ~।) '? [ओह, काम नहीं करता] –

+1

बेन नोट्स के रूप में, ggplot (बार प्लॉट्स, पहलुओं आदि में बार) में मूल रूप से सबकुछ के क्रम को नियंत्रित करने का तरीका एक कारक का उपयोग करना और स्तर के क्रम को समायोजित करना है। – joran

+0

... या यह: http://stackoverflow.com/q/3311901/324364 – joran

उत्तर

24

मुझे नहीं लगता कि मैं वास्तव में आपकी आवश्यकता "एक नया डेटा फ्रेम बनाने के बिना" संतुष्ट कर सकते हैं, लेकिन आप मक्खी पर नया डेटा फ्रेम बना सकते हैं:

ggplot(transform(iris, 
     Species=factor(Species,levels=c("virginica","setosa","versicolor")))) + 
    geom_histogram(aes(Petal.Width))+ facet_grid(Species~.) 

मैं मानता हूँ यह अगर अच्छा होगा वहाँ एक और तरीका यह नियंत्रित करने के लिए थे, लेकिन ggplot पहले से ही एक बहुत शक्तिशाली (और जटिल) इंजन है कि (1) डेटा में पंक्तियों सेट के आदेश के आदेश से स्वतंत्र होता है ...

नोट (2) कारक के स्तर। # 2 क्या factor(...,levels=...) परिवर्तन है, और ggplot पहलुओं के क्रम को निर्धारित करने के लिए देखता है। # 1 करना (निर्दिष्ट क्रम में डेटा फ्रेम की पंक्तियों को सॉर्ट करना) एक दिलचस्प चुनौती है। मुझे लगता है कि मैं वास्तव में # 2 कर पहले, और फिर कारक के संख्यात्मक मान के अनुसार सॉर्ट करने के लिए order() या arrange() का उपयोग करके इस लक्ष्य को हासिल होगा:

neworder <- c("virginica","setosa","versicolor") 
library(plyr) ## or dplyr (transform -> mutate) 
iris2 <- arrange(transform(iris, 
      Species=factor(Species,levels=neworder)),Species) 

मैं तुरंत एक त्वरित तरीका है इस करने के लिए नहीं देख सकते हैं के बिना कारक स्तर के क्रम को बदलना (आप इसे कर सकते हैं और फिर तदनुसार कारक स्तर के क्रम को रीसेट कर सकते हैं)।

सामान्य रूप से, आर में कार्य जो कि एक स्पष्ट चर के स्तर के क्रम पर निर्भर करता है, डेटासेट में पंक्तियों के क्रम पर कारक स्तर के आदेश पर आधारित नहीं है: उपर्युक्त उत्तर अधिक आम तौर पर लागू होता है।

+0

क्या आप समझा सकते हैं कि 'ट्रांसफॉर्म' कॉल ठीक से क्या कर रही है? यदि मैं 'ट्रांसफॉर्म (आईरिस, कारक (प्रजातियां, स्तर = सी ("वर्जिनिका", "सेटोसा", "वर्सीकलर") टाइप करता हूं))' आर में, यह 'स्पेस' के साथ डेटाफ्रेम को दिए गए क्रम में आउटपुट नहीं करता है 'स्तर' – user248237dfsf

+0

मुझे लगता है कि आपने 'ट्रांसफॉर्म' कॉल के 'प्रजाति =' भाग को छोड़ दिया है ...' transform' * एक नया डेटा फ्रेम उत्पन्न कर रहा है। –

+0

मैंने इसे गलत टाइप किया, क्षमा करें। अगर मैं 'ट्रांसफॉर्म करता हूं (आईरिस, प्रजाति = कारक (प्रजातियां, स्तर = सी ("वर्जिनिका", "सेटोसा", "वर्सीकलर")))' आर में, यह डेटाफ्रेम आउटपुट करता है जिसमें ऑर्डर होता है: 'सेटोसा, वर्सीकलर, वर्जिनिका 'तो मुझे समझ में नहीं आता कि यहां कैसे काम करता है। आपका पूरा कॉल उस ग्राफ का उत्पादन करता है जो मैं चाहता था लेकिन मैं उलझन में हूं कि यह 'ट्रांसफॉर्म' कॉल क्यों 'स्तर' में निर्दिष्ट आदेश नहीं देता है। धन्यवाद – user248237dfsf

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