2011-10-04 16 views
11

updatetrellis प्लॉट की विधि प्रारंभिक कॉल के बाद lattice साजिश को संशोधित करने की अनुमति देती है। लेकिन update व्यवहार संलग्न करने से प्रतिस्थापित करने की तरह अधिक है। यह ggplot2 मुहावरे से अलग है जहां प्रत्येक नई परत पहले से मौजूद है जो additive है। lattice का उपयोग करके इस additive व्यवहार को प्राप्त करना संभव है?क्या आर में जाली पैनल अपडेट करना संभव है?

एक उदाहरण:

LL <- barchart(yield ~ variety | site, data = barley, 
     groups = year, stack = TRUE, 
     between=list(y=0.5), 
     scales = list(x = list(rot = 90))) 
print(LL) 

enter image description here

अब मैं मौजूदा साजिश को panel.text जोड़ना चाहते हैं। निम्नलिखित तरीके से update का उपयोग करना काम नहीं करता:

update(LL, panel=function(...){ 
      args <- list(...); panel.text(args$x, args$y+2, round(args$y, 0)) 
     }) 

enter image description here

मुझे पता है कि मैं पैनल समारोह में सभी परतों के निर्दिष्ट द्वारा update उपयोग कर सकते हैं:

update(LL, panel=function(...){ 
      args <- list(...) 
      panel.barchart(...) 
      panel.text(args$x, args$y+2, round(args$y, 0)) 
     }) 

हो जाएगा ताकि काम, लेकिन यह आवश्यक है कि मुझे पता है कि lattice साजिश में पहले से क्या है - या मैं अपने कोड को काफी हद तक दोहराता हूं।

प्रश्न: वहाँ update.trellis में मौजूदा पैनल में जोड़ने का एक तरीका है?

उत्तर

13

latticeExtra पैकेज से layer देखें।

library(lattice) 
library(latticeExtra) 
LL <- barchart(yield ~ variety | site, data = barley, 
     groups = year, stack = TRUE, 
     between=list(y=0.5), 
     scales = list(x = list(rot = 90))) 
LL + layer(panel.text(x, y, round(y, 0), data=barley)) 

result of code

+0

एक उपयोगी टिप के लिए +1 – Andrie

+0

नहीं है अच्छा [latticeExtra परिचय पृष्ठ] (http (और मेरी कोड में लापता 90 ठीक करने के लिए!): //latticeextra.r-forge.r -project.org)। – Marek

+1

एक तरफ दिलचस्प: यदि आप उसी सत्र में 'ggplot2' भी लोड करते हैं, तो ggplot 'layer' फ़ंक्शन जाली' परत' को छुपाएगा। तो मुझे इस फ़ंक्शन को 'एलएल + लैटिसएक्स्ट्रा :: लेयर (...) ' – Andrie

2

यहाँ latticeExtra बिना यह करने के लिए एक तरीका है। माना जाता है कि यह latticeExtra मार्ग से अधिक जटिल और कठिन है। हालांकि, इस संदर्भ में trellis.focus विधि के साथ लचीलापन अन्य संदर्भों में अधिक उपयोगी हो सकता है।

barchart(yield ~ variety | site, data = barley, 
       groups = year, stack = TRUE, 
       between=list(y=0.5), 
       scales = list(x = list(rot = 90))) 

panels = trellis.currentLayout() 
for(i in seq_along(panels)) { 
    ind = which(panels == i, arr.ind=TRUE) 
    trellis.focus("panel",ind[2],ind[1]) 
    vars = trellis.panelArgs() 
    panel.text(vars$x,vars$y,round(vars$y,0)) 
} 

Output of code above

+0

+1 के रूप में कॉल करने की आवश्यकता है, बहुत अच्छा, जागरूक होने के लिए एक शानदार तरीका है। – Aaron

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