2011-12-16 13 views
13

El siguiente es el ejemplo en el que trabajo.cambiar el fondo y el texto de las tiras asociadas a varios paneles en R/celosía

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

enter image description here

quiero poner diferente color de la tira para diferentes sprips y color de fuente también es diferente optimizado con el color de fondo de color. Por ejemplo:

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

Croquis de la primera se proporciona: enter image description here ¿Cómo puedo lograr esto?

Respuesta

15

Aquí hay una solución limpia y fácilmente personalizable.

myStripStyle(), la función que se pasa al argumento de strip=xyplot() utiliza la variable de contador which.panel para seleccionar colores y también el valor de factor.levels para el panel que está siendo trazada actualmente.

Si quieres jugar con la configuración, simplemente pon un browser() en algún lugar dentro de la definición de myStripStyle() y hazlo!

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

Podría no ser conveniente referirse a variables fuera del ámbito de la función.

Puede usar par.strip.text para pasar argumentos adicionales a la función strip. par.strip.text se puede definir en el nivel de trazado y se usa generalmente para establecer propiedades de visualización de texto, pero si se utiliza una lista, puede usarla para llevar sus variables a la función de corte.

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) 
Cuestiones relacionadas