在r中的多通道xyplot中使用颜色向量

在r中的多通道xyplot中使用颜色向量,r,colors,legend,lattice,R,Colors,Legend,Lattice,给定4个等长向量(x,y,z,q),其中q是一个字符向量,颜色名称用作分组结构, 我运行xyplot命令: xyplot(y~x|factor(z),pch=19,data=mydata,col=mydata$q) 一切正常,除了超过第一个因子级别z,绘图不遵循颜色向量q的顺序,点是从颜色向量q随机分配的颜色。如果我调用向量q,我看到颜色名称对于z的每个级别都是正确排序的 作为一个明确的例子: 数据框中的一行可能包含(x,y,z,q)的以下值:(13,25,march,“蓝色”) 对于mult

给定4个等长向量(x,y,z,q),其中q是一个字符向量,颜色名称用作分组结构, 我运行xyplot命令:

xyplot(y~x|factor(z),pch=19,data=mydata,col=mydata$q)
一切正常,除了超过第一个因子级别z,绘图不遵循颜色向量q的顺序,点是从颜色向量q随机分配的颜色。如果我调用向量q,我看到颜色名称对于z的每个级别都是正确排序的

作为一个明确的例子: 数据框中的一行可能包含(x,y,z,q)的以下值:(13,25,march,“蓝色”)

对于multipanel xyplot中的“三月”图,此数据点将显示为不同的颜色,尽管是矢量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"])})
我希望图例中文本的实际分组向量是$area。。。 字符向量队列$color和向量队列$pch3用作分组结构,以直观地表示绘图中的队列$area。。。 因此,我需要队列$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"))})

一个有效的例子将确保我们处理您的所有案例。这个简单的例子可能无法测试更复杂的情况。编辑以涵盖@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"])
   })

<代码> D1

一个可以改变PANEL.XYRAW在组中使用的默认颜色,通过改变<代码> tRel.Par。 这是数据,这一次,不同的

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)

请参阅
?面板。叠加
以了解详细信息,因为这实际上是
时调用的函数!isNULL(组)

尝试只将唯一的颜色传递给
,并为
参数添加一些内容。谢谢,这非常有效。我现在意识到掌握面板功能是定制多面板绘图的关键。是的。这种掌握的一个重要部分是准确理解传递给这些面板函数的内容(尤其是名称)。花时间研究
?xyplot
中“常用参数”部分的
面板
将获得回报。您知道如何为该绘图创建图例,即为颜色分组创建文本标签(红点与纽约、绿点与波士顿等)?键函数对于lattice来说很残酷。我用我正在使用的命令添加了一个示例数据集。如上所述,我需要添加一个图例,其中颜色代码表示颜色向量,但文本标签来自另一个与颜色向量具有相同分组结构的向量。这不是真正的“数据集”,只是一个不完整的描述。
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)
   })