change background and text of strips associated to multiple panels in R / lattice

前端 未结 2 1770
灰色年华
灰色年华 2020-11-28 13:47

The following is the example I work on.

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

2条回答
  •  离开以前
    2020-11-28 14:25

    It might not be wise to refer to variables outside of the scope of the function.

    You could use par.strip.text to pass additional arguments to the strip function. par.strip.text can be defined at the plot level and is generally used for setting text display properties, but beeing a list you can use it to bring your variables to the strip function.

    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)
    

提交回复
热议问题