2012-03-23 14 views
23

मैं ggplot2 में "टिप्स" डेटा सेट का उपयोग कर रहा हूं। अगर मैंसंगत रूप से facet_grid के साथ पैनल पृष्ठभूमि बदलें?

sp = ggplot(tips,aes(x=total_bill, y = tip/total_bill)) + 
     geom_point(shape=1) + 
     facet_grid(sex ~ day) 

साजिश ठीक हो गई है। लेकिन अब मैं सिर्फ "शुक्र" के नीचे भूखंडों के लिए पैनल पृष्ठभूमि बदलना चाहता हूं। क्या इसे करने का कोई तरीका है?

इससे भी बेहतर, क्या मैं पैरामीटर पारित करके सशर्त रूप से रंग बदल सकता हूं? उदाहरण के लिए यदि 3 से अधिक अंक 0.1 से नीचे हैं, तो पैनल पृष्ठभूमि (केवल उस पैनल के लिए) को एक निश्चित रंग में बदलें जबकि अन्य सभी डिफ़ॉल्ट हल्के भूरे रंग के बने रहें?

उत्तर

50

में ggplot2 है के लिए कुछ भी करने के लिए सामान्य नियम,

  1. एक डेटा फ्रेम है कि जानकारी आप एक geom
को
  • दर्रा कि डेटा फ्रेम प्लॉट करने के लिए चाहते हैं encodes बनाएं

    इस मामले में इसे थोड़ा अधिक जटिल बना दिया गया है क्योंकि साजिश के उस विशेष पहलू के बारे में आप बदलना चाहते हैं। शक्तियों को ggplot2 डिज़ाइन किया गया है जो गैर-डेटा तत्वों (यानी विषय) से साजिश के डेटा तत्वों (यानी geom) को अलग करता है, और ऐसा होता है कि साजिश पृष्ठभूमि "गैर-डेटा" श्रेणी के अंतर्गत आती है।

    वहाँ हमेशा अंतर्निहित ग्रिड वस्तु manually को संशोधित करने का विकल्प है लेकिन यह काम कठिन है और विवरण ggplot2 के विभिन्न संस्करणों के साथ बदल सकते हैं। इसके बजाए, हम "हैक" को नियोजित करेंगे कि हैडली this प्रश्न में संदर्भित है।

    #Create a data frame with the faceting variables 
    # and some dummy data (that will be overwritten) 
    tp <- unique(tips[,c('sex','day')]) 
    tp$total_bill <- tp$tip <- 1 
    
    #Just Fri 
    ggplot(tips,aes(x=total_bill, y = tip/total_bill)) + 
         geom_rect(data = subset(tp,day == 'Fri'),aes(fill = day),xmin = -Inf,xmax = Inf, 
          ymin = -Inf,ymax = Inf,alpha = 0.3) + 
         geom_point(shape=1) + 
         facet_grid(sex ~ day) 
    

    enter image description here

    #Each panel 
    ggplot(tips,aes(x=total_bill, y = tip/total_bill)) + 
         geom_rect(data = tp,aes(fill = day),xmin = -Inf,xmax = Inf, 
          ymin = -Inf,ymax = Inf,alpha = 0.3) + 
         geom_point(shape=1) + 
         facet_grid(sex ~ day) 
    

    enter image description here

  • +0

    धन्यवाद आता है में निर्देशांक ज्यादा मदद के लिए। निश्चित रूप से उपयोगी। – broccoli

    +3

    ध्यान दें कि geom_raster के पीछे पैनल.बैकग्राउंड और उपरोक्त geom_rect अलग-अलग व्यवहार करते हैं क्योंकि रास्टर के पीछे "कुछ नहीं" होने पर एक अनुकूलन हो सकता है। जब पीडीएफ के रूप में सहेजा जाता है, तो geom_rect संस्करण एक बड़ी बड़ी फ़ाइल है और अधिकांश पीडीएफ दर्शकों के साथ लगभग अनपेक्षित है! – momeara

    +0

    क्या यह निरंतर सुविधा और पैमाने के साथ ऐसा करना संभव है? – UnivStudent

    1

    मैं अभी तक कोई टिप्पणी नहीं कर सकते हैं .. इसलिए यहाँ अपने जवाब Jöran के लिए एक अतिरिक्त जवाब है।

    यदि आपको पारदर्शिता सेटिंग में समस्या हो रही है, जैसे अल्फा = 0.2 सेट करना, लेकिन किसी भी अंतर को ध्यान में रखते हुए, यह आपके द्वारा ggplot को दिए गए डेटा के कारण हो सकता है।

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

    इस उत्तर से geom_rect and alpha - does this work with hard coded values?

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