2011-12-16 10 views
13

Il seguente è l'esempio su cui lavoro.cambia lo sfondo e il testo delle strisce associate a più pannelli in R/reticolo

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

enter image description here

voglio mettere colore differente nastro per diverse sprips e colore del carattere è anche diverso ottimizzato con il colore backgroud. Per esempio:

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

schizzo approssimativo del primo è previsto: enter image description here Come posso raggiungere questo obiettivo?

risposta

15

Ecco una soluzione pulita e facilmente personalizzabile.

myStripStyle(), la funzione che viene passata alla strip= argomento xyplot() utilizza la variabile contatore which.panel per selezionare colori e anche il valore della factor.levels per il pannello che è attualmente tracciata.

Se si desidera giocare con le impostazioni, basta mettere un browser() da qualche parte all'interno della definizione di myStripStyle() e avere a esso!

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

Potrebbe non essere saggio riferimento a variabili di fuori dell'ambito della funzione.

È possibile utilizzare par.strip.text per passare argomenti aggiuntivi alla funzione striscia. par.strip.text può essere definito a livello di stampa ed è generalmente utilizzato per l'impostazione delle proprietà di visualizzazione del testo, ma in un elenco è possibile utilizzarlo per portare le variabili sulla funzione di striscia.

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) 
Problemi correlati