2012-03-17 139 views
4

我試圖讓條的背景顏色改變(這是一個6乘6矩陣,我有6個帶狀顏色庫存在一個名爲可樂的矢量)。我試圖結合在互聯網上找到的東西,但結果我得到了我完全脫離標記:現在我得到的是,垂直條全部是黃色和水平的全部是紅色的:(改變背景顏色在xyplot()

library(lattice) 
library(latticeExtra) 
B<-structure(list(ylab = c(0, 0, -1, -1, -1, -1, 0, 0, -1, -1, -1, 
-1, 1, 1, 0, 0, 0, -1, 1, 1, 0, 0, 1, -1, 1, 1, 0, -1, 0, -1, 
1, 1, 1, 1, 1, 0), xlab = c(0, -1.02679909743483, -4.31389840050087, 
-4.72016163070677, -3.82773068058066, -4.95060796675797, 1.02679909743483, 
0, -3.28709930306604, -3.69336253327194, -2.80093158314584, -3.92380886932314, 
4.31389840050087, 3.28709930306604, 0, -0.406263230205904, 0.486167719920203, 
-0.636709566257106, 4.72016163070677, 3.69336253327194, 0.406263230205904, 
0, 0.892430950126108, -0.230446336051202, 3.82773068058066, 2.80093158314584, 
-0.486167719920203, -0.892430950126108, 0, -1.12287728617731, 
4.95060796675797, 3.92380886932314, 0.636709566257106, 0.230446336051202, 
1.12287728617731, 0), zlab = c(1, 0.435981356312883, 1.28746578953454e-08, 
1.64728897189548e-09, 9.04719004157784e-08, 1.22124532708767e-15, 
0.435981356312883, 1, 2.30452944283144e-07, 1.23923277972615e-07, 
1.38063360011209e-06, 7.7715611723761e-16, 1.28746578953454e-08, 
2.30452944283144e-07, 1, 0.654543666603895, 0.608788895482761, 
3.33066907387547e-16, 1.64728897189548e-09, 1.23923277972615e-07, 
0.654543666603895, 1, 0.0429030453016164, 0, 9.04719004157784e-08, 
1.38063360011209e-06, 0.608788895482761, 0.0429030453016164, 
1, 4.22994972382185e-14, 1.22124532708767e-15, 7.7715611723761e-16, 
3.33066907387547e-16, 0, 4.22994972382185e-14, 1), g1 = structure(c(1L, 
2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 
6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 
4L, 5L, 6L), .Label = c("1", "2", "5", "6", "7", "8"), class = "factor"), 
    g2 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
    2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 
    5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L), .Label = c("1", 
    "2", "5", "6", "7", "8"), class = "factor")), .Names = c("ylab", 
"xlab", "zlab", "g1", "g2"), row.names = c(NA, -36L), class = "data.frame") 
mycol<-c("light grey", "light grey", "purple", "purple", "purple", "purple", 
"light grey", "light grey", "purple", "purple", "purple", "purple", 
"light green", "light green", "light grey", "light grey", "light grey", 
"purple", "light green", "light green", "light grey", "light grey", 
"light green", "purple", "light green", "light green", "light grey", 
"purple", "light grey", "purple", "light green", "light green", 
"light green", "light green", "light green", "light grey") 

mycola <- rainbow(6) 


useOuterStrips(bwplot(~B$ylab|B$g1*B$g2,ylab="",xlab="",as.table=TRUE, par.settings=list(strip.background=list(col=mycola)),panel=function(...,bg){ 
    panel.fill(col=mycol[panel.number()]) 
},strip = function(..., bg) { 
    strip.fill=col[which.packet()] 
    },scale=list(draw=FALSE))) 
+0

如果我理解正確的,你想分配不同的顏色,以水平和垂直線條的每一個元素?目前,您可以設置所有水平條的顏色,但不能單獨設置。 – Seth 2012-03-17 15:03:31

+0

是的,這是我想要做的。你會知道我怎樣才能完全刪除條?我會嘗試對矩陣的外部行/列進行着色/調整大小,然後 – user189035 2012-03-17 15:09:55

+0

+1感謝有趣的問題,特別是對於可重現的示例。 – 2012-03-17 17:21:21

回答

4

這段代碼(很快適用於我對this SO question的回答)可以幫助您找到解決方案的一部分(我會很感興趣的是瞭解它是否可以適用於在每個條中打印文本)。

需要注意的一件事是,自定義strip函數需要直接傳遞給useOuterStrips(),而不是嵌套調用bwplot()

# Create a function to be passes to "strip=" argument of xyplot 
myStripStyle <- function(which.panel, factor.levels, ...) { 
    panel.rect(0, 0, 1, 1, 
       col = bgColors[which.panel], 
       border = 1) 
    ## This call to panel.text() commented out because it does not 
    ## work as I would have expected/hoped it to 
    # panel.text(x = 0.5, y = 0.5, 
    #   font=2, 
    #   lab = factor.levels[which.panel], 
    #   col = "black") 
} 

mycola <- rainbow(6) 
bgColors <- mycola 

useOuterStrips(bwplot(~B$ylab|B$g1*B$g2,ylab="",xlab="",as.table=TRUE, 
         panel=function(...,bg){ 
          panel.fill(col=mycol[panel.number()]) 
         }, 
         scale=list(draw=FALSE)), 
       strip = myStripStyle, 
       strip.left = myStripStyle) 

enter image description here