2011-12-16 6 views
13

Aşağıda, üzerinde çalıştığım örnek verilmiştir. R/lattice'de birden çok panele bağlı şeritlerin arka planını ve metnini değiştirme

enter image description here

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

farklı sprips için farklı şerit rengi koymak istiyorum ve yazı tipi rengi backgroud renk ile optimize da farklıdır. Örneğin: İlk birinin

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

Kaba taslak sağlanır: enter image description here Bunu nasıl başarabiliriz?

cevap

15

İşte temiz ve kolayca özelleştirilebilir bir çözüm.

myStripStyle()

, xyplot() arasında strip= argüman geçirilir işlev renkleri belirlemek için karşı değişken which.panel ve de şu anda çizilen varlık panel için factor.levels değerini kullanır.

Eğer ayarları ile uğraşmak istiyorsanız, sadece myStripStyle() tanımı içinde bir yerde bir browser() koymak ve ona sahip!

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

işlevin kapsamı dışında değişkenleri ifade akıllıca olmayabilir.

Şerit işlevine ek argümanlar iletmek için par.strip.text kullanabilirsiniz. par.strip.text, çizim düzeyinde tanımlanabilir ve genellikle metin görüntüleme özelliklerini ayarlamak için kullanılır, ancak değişkenlerinizi şerit işlevine getirmek için kullanabileceğiniz bir liste oluşturur.

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) 
İlgili konular