2016-05-10 12 views
10

पर बहु ​​चर facet_wrap लेबल मैं facet_wrap उपयोग कर रहा हूँ मेरी बिखराव साजिश विभाजित करने के लिएggplot2: रखो एक पंक्ति

facet_wrap(x~y+z) 

के रूप में यह मेरे मामले में 22 भूखंडों उत्पन्न करता है के रूप में वांछित। हालांकि, उन 22 भूखंडों में से प्रत्येक के लिए लेबल 3 पंक्तियों (एक्स, वाई और जेड) में प्रदर्शित होता है जो अनावश्यक रूप से खिड़की में जगह का उपभोग करता है और भूखंडों को एक छोटे से क्षेत्र में चलाता है। मैं चाहता हूं कि मेरे भूखंड आकार में बड़े हों। चूंकि चर वाई और जेड कम हैं, इसलिए मैं उन्हें दो की बजाय उसी पंक्ति में प्रदर्शित करना चाहता हूं।

मैंने प्रयोगशाला विकल्पों में देखा लेकिन उनमें से कोई भी ऐसा नहीं लगता जो मैं चाहता हूं। मैं यहां किसी भी सुझाव की सराहना करता हूं।

उत्तर

9

इस मामले में आप भी label_wrap_gen() पर विचार हो सकता:

p <- ggplot(mtcars, aes(wt,mpg)) + geom_point() 
p + facet_wrap(cyl~am+vs, labeller = label_wrap_gen(multi_line=FALSE)) 

अधिक जानकारी के लिए भी here और here देखना ।

6

मुझे यकीन नहीं है कि लैबेलर फ़ंक्शन के साथ ऐसा कैसे करें, लेकिन दूसरा विकल्प समूहिंग चर बनाने के लिए है जो आपके सभी तीन स्पष्ट चर को एक वैरिएबल में जोड़ता है जिसका उपयोग फ़ेसटिंग के लिए किया जा सकता है। फ्लाई पर नया समूह चर बनाने के लिए अंतर्निहित mtcars डेटा फ्रेम और dplyr पैकेज का उपयोग करके एक उदाहरण दिया गया है। उसके बाद एक फ़ंक्शन के साथ एक अद्यतन है जो एक से तीन पहलू चर के गतिशील विकल्प की अनुमति देता है।

library(dplyr) 

ggplot(mtcars %>% mutate(group = paste(cyl,am,vs, sep="-")), 
     aes(wt,mpg)) + 
    geom_point() + 
    facet_wrap(~group) 

enter image description here

अद्यतन: लचीलापन के बारे में टिप्पणी के बारे में, नीचे दिए गए कोड एक समारोह है कि उपयोगकर्ता वांछित डेटा फ्रेम और गतिशील रूप से एक पर पहलू को चुनने सहित चर नाम, दर्ज करने के लिए अनुमति देता है, दो, या तीन कॉलम।

library(dplyr) 
library(lazyeval) 

mygg = function(dat, v1, v2, f1, f2=NA, f3=NA) { 

    dat = dat %>% 
    mutate_(group = 
       if (is.na(f2)) { 
       f1 
       } else if (is.na(f3)) { 
       interp(~paste(f1,f2, sep='-'), f1=as.name(f1), f2=as.name(f2)) 
       } else { 
       interp(~paste(f1,f2,f3,sep='-'), f1=as.name(f1), f2=as.name(f2), f3=as.name(f3)) 
       }) 

    ggplot(dat, aes_string(v1,v2)) + 
    geom_point() + 
    facet_wrap(~group) 
} 

अब चलो समारोह बाहर की कोशिश करते हैं:

library(vcd) # For Arthitis data frame 

mygg(Arthritis, "ID","Age","Sex","Treatment","Improved") 
mygg(mtcars, "wt","mpg","cyl","am") 
mygg(iris, "Petal.Width","Petal.Length","Species") 

enter image description here

+0

धन्यवाद, यह सुनिश्चित काम करता है। हालांकि, मैं यह जानना चाहता हूं कि ggplot2 पैरामीटर का उपयोग करके ऐसा करने का कोई तरीका है या नहीं। मैं विभिन्न चरों का उपयोग करके अपने भूखंडों को facet_wrap करना चाहता हूं और मेरी डेटा तालिका में अनावश्यकता से बचना चाहूंगा जो पहले से ही विशाल है। – beeprogrammer

+1

अद्यतन उत्तर देखें। यह भी ध्यान रखें कि कोड डेटा फ्रेम ऑब्जेक्ट में कोई कॉलम नहीं जोड़ता है। अतिरिक्त कॉलम केवल ggplot फ़ंक्शन के भीतर जोड़ा जाता है और डेटा फ्रेम ऑब्जेक्ट को स्वयं नहीं बदलता है। – eipi10