2012-03-21 41 views
1

給定4個長度相等的向量(x,y,z,q)其中q是帶有顏色名稱的字符向量,用作分組結構 我運行xyplot命令:在r中的多面xyplot中使用顏色向量

xyplot(y~x|factor(z),pch=19,data=mydata,col=mydata$q) 

一切工作正常,但過去z的第一因子水平,該地塊不尊重顏色矢量q的順序和點隨機從顏色向量q指定的顏色。如果我調用向量q,我發現顏色名稱對於z的每個級別都是正確排序的。

作爲一個明顯的例子: 在數據幀可以包含用於(X,Y,Z,Q)在以下值的行:(13,25,3月, 「藍」)

對於「 3月「的情節,這個數據點會出現,但作爲一種不同的顏色,雖然是矢量q的顏色。

我對使用帶有cex分組結構的向量也有類似的問題;第一個因子水平產生正確的圖,但其他因子水平不會根據具有分組結構的向量而改變。

如果這個問題不清楚,我會很樂意修改它,直到它有意義。我相信其他人也有這個問題。

str(cohort) 



$ date     : Date, format: "2012-03-05" "2012-03-05" ... 
$ area     : int 1111 3053 3555 3556 4228 6447 1111 ... 
$ score    : num 0.2282 0.1498 0.1823 0.0995 0.3083 ... 
$ color     : chr "purple" "blue" "brown" "violet" ... 
$ cex3     : num 0.753 0.84 1.067 0.875 0.753 ... 
$ pch3     : num 7 19 19 19 19 8 7 19 19 19 ... 
$ time_spent   : int 0 0 0 0 0 0 1 1 1 1 ... 

工作命令:

xyplot(score~time_spent|factor(date),groups=area,data=cohort,ylim=c(0,.6),panel=function(x,y,subscripts){panel.xyplot(x=x,y=y,subscripts=subscripts,pch=cohort[subscripts,"pch3"],col=cohort[subscripts,"color"],col.line="black",cex=cohort[subscripts,"cex3"])}) 

實際分組載體我想文本在傳說中是隊列$面積... 的特徵向量隊列$顏色和矢量隊列$ PCH 3使用作爲分組結構,以直觀地表示隊列中的區域... 因此,我想要一個顏色代碼/符號圖例用於隊列$ color和隊列$ pch3,但是來自隊列$ area的文本標籤。

示例性圖例:紫色的點狀「1111」 藍色點狀「3053」等

想出了工作液:

xyplot(score ~ time_spent | factor(date), groups = area, data = cohort,auto.key=list(columns=10,points=TRUE,title="area"), 
    par.settings = list(superpose.symbol = list(col = sort(unique(cohort$color)),pch=sort(unique(cohort$pch3)))), 
    panel = function(x, y, subscripts = subscripts, groups = groups) { 
    panel.xyplot(x = x, y = y, 
    subscripts = subscripts, groups = groups,col.line="black",type=c("p","g"))}) 
+0

嘗試,只透過獨特的顏色爲'col'並添加東西了'groups'參數的函數。 – joran 2012-03-21 22:33:55

回答

0

工作示例會確保我們解決所有的你的情況。這個簡單的例子可能不會測試更復雜的情況。 EDIT將覆蓋在由@BenBarnes提供情況:

d1 <- data.frame(x=c(NA, 13:20, NA), y = 25, z = c(rep('march', 5), 
    rep("april", 5)), color = c(c(rep(c("red", "green"), 2), "red"), 
    c(rep(c("blue", "yellow"), 2), "blue")), stringsAsFactors = FALSE) 

xyplot(y ~ x | factor(z), data = d1, 
    panel = function(x, y, subscripts) { 
     panel.xyplot(x = x, y = y, 
        subscripts=subscripts, 
        col = d1[subscripts, "color"]) 
    }) 
+0

謝謝,這工作完美。我現在認識到,掌握面板功能是定製多面板圖的關鍵。 – benrolls 2012-03-22 15:47:29

+0

是的。這個掌握的一個重要部分是確切地理解什麼(特別是用什麼名字)傳遞給這些面板功能。時間在學習'?xyplot'將產生紅利的「公用參數」部分的'panel'款花。 – 2012-03-22 16:01:13

+0

任何想法如何創建此情節,即對顏色分組(紅點紐約,綠點與波士頓等)創建文本標籤一個傳奇?關鍵函數對於格是殘酷的。 – benrolls 2012-03-22 21:36:43

0

人們可以通過改變值trellis.par.get()$superpose.symbol$col

這裏改變基團的存在所使用的panel.xyplot的默認顏色是數據,此時用不同的顏色爲z的不同值。

d1 <- data.frame(x=c(NA, 13:20, NA), y = 25, z = c(rep('march', 5), 
    rep("april", 5)), color = c(c(rep(c("red", "green"), 2), "red"), 
    c(rep(c("blue", "yellow"), 2), "blue")), stringsAsFactors = FALSE) 

這裏是改性xyplotpar.settings一個用戶指定的值,並考慮到一個事實,即對應於groups參數的變量將被變成一個因子,從而排序。

xyplot(y ~ x | factor(z), groups = color, data = d1, 
    par.settings = list(superpose.symbol = list(col = sort(unique(d1$color)))), 
    panel = function(x, y, subscripts = subscripts, groups = groups) { 
     panel.xyplot(x = x, y = y, 
     subscripts = subscripts, groups = groups) 
    }) 

?panel.superpose的細節,因爲這是事實,被調用時!isNULL(groups)