2011-12-16 8 views
13

में एकाधिक पैनलों से जुड़े स्ट्रिप्स का पृष्ठभूमि और पाठ बदलें निम्नलिखित उदाहरण मैं काम करता हूं।आर/जाली

require(lattice) 
data(barley) 
xyplot(yield ~ year | site, data = barley) 

enter image description here

मैं अलग sprips के लिए अलग अलग रंग की पट्टी रखना चाहते हैं और फ़ॉन्ट रंग backgroud रंग के साथ अनुकूलित भी अलग है। उदाहरण के लिए:

strip background colors = c("black", "green4", "blue", "red", "purple", "yellow") 
font color = c("white", "yellow", "white", "white", "green", "red") 

पहले एक का स्केच प्रदान की जाती है: enter image description here मैं यह कैसे प्राप्त कर सकते हैं?

उत्तर

15

यहां एक साफ और आसानी से अनुकूलन योग्य समाधान है।

myStripStyle(), समारोह है कि xyplot() की strip= तर्क में पारित हो जाता है काउंटर चर which.panel रंग का चयन करने के लिए और भी पैनल है कि वर्तमान में साजिश रची जा रही है के लिए factor.levels का मूल्य उपयोग करता है।

यदि आप सेटिंग्स के साथ खेलना चाहते हैं, तो बस myStripStyle() की परिभाषा के अंदर कहीं और डालें!

bgColors <- c("black", "green4", "blue", "red", "purple", "yellow") 
txtColors <- c("white", "yellow", "white", "white", "green", "red") 

# Create a function to be passed to "strip=" argument of xyplot 
myStripStyle <- function(which.panel, factor.levels, ...) { 
    panel.rect(0, 0, 1, 1, 
       col = bgColors[which.panel], 
       border = 1) 
    panel.text(x = 0.5, y = 0.5, 
       font=2, 
       lab = factor.levels[which.panel], 
       col = txtColors[which.panel]) 
}  
xyplot(yield ~ year | site, data = barley, strip=myStripStyle) 

enter image description here

9

यह समारोह के दायरे से बाहर चर का उल्लेख करने के लिहाज से नहीं हो सकता है।

स्ट्रिप फ़ंक्शन के लिए अतिरिक्त तर्क पारित करने के लिए आप par.strip.text का उपयोग कर सकते हैं। par.strip.text को साजिश के स्तर पर परिभाषित किया जा सकता है और आम तौर पर टेक्स्ट डिस्प्ले गुणों को सेट करने के लिए उपयोग किया जाता है, लेकिन एक सूची को मधुमक्खी करना जिसे आप स्ट्रिप फ़ंक्शन में अपने चर लाने के लिए इसका उपयोग कर सकते हैं।

bgColors <- c("black", "green4", "blue", "red", "purple", "yellow") 
txtColors <- c("white", "yellow", "white", "white", "green", "red") 

# Create a function to be passes to "strip=" argument of xyplot 
myStripStyle <- function(which.panel, factor.levels, par.strip.text, 
        custBgCol=par.strip.text$custBgCol, 
        custTxtCol=par.strip.text$custTxtCol,...)  { 
    panel.rect(0, 0, 1, 1, 
      col = custBgCol[which.panel], 
      border = 1) 
    panel.text(x = 0.5, y = 0.5, 
      font=2, 
      lab = factor.levels[which.panel], 
      col = custTxtCol[which.panel]) 
} 
xyplot(yield ~ year | site, data = barley, 
     par.strip.text=list(custBgCol=bgColors, 
          custTxtCol=txtColors), 
     strip=myStripStyle)