2012-03-21 106 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)