为lattice中的不同面板/分面指定颜色

5

我的数据如下:

grp = rep(1:2, each = 100)
chr = c(rep(1:10, each = 10), rep(1:10, each = 10))
var = paste (grp, "chr", chr, sep = "")
pos = (rep(1:10, 20)) 
yvar = rnorm(200) 
mydf = data.frame (var, pos, yvar)

require( lattice)
xyplot(yvar ~ pos| factor(var), data = mydf, layout = c(1,10), type = c("g", "h"),
         col = "darkolivegreen", lwd = 4)

(1) 我想要为不同的图表/面板设置不同的颜色 - 例如 - 2chr1 是深橄榄绿色,但chr10是紫色。然后再次交替设置深橄榄绿色和紫色以此类推。
(2) 我想要使用反向顺序的图表,也就是说,2chr9 应该在底部。
谢谢。

我认为在lattice世界中,子图被称为“面板”,而在ggplot世界中则被称为“分面”... - Ben Bolker
1个回答

6
使用as.table=TRUE可以改变面板的顺序,使用groups(以及扩展的col向量)可以改变颜色。 编辑:调整因子水平的顺序。
mydf <- 
  data.frame (var, pos, yvar, 
              ##  fvar = factor(var,levels=unique(var)),
              fvar = factor(var, levels = c(outer(2:1, 1:10, paste, sep="chr"))))

xyplot(yvar ~ pos| fvar,
       groups=fvar,
       data = mydf, layout = c(1,10,2), type = c("g", "h"),
       col = c("darkolivegreen","purple"), lwd = 4, as.table=TRUE)

扩展的layout命令可以得到两页。

enter image description here

另外,一种并排布局可能更好:

library(latticeExtra)
useOuterStrips(xyplot(yvar ~ pos|factor(grp)*factor(chr),
                      groups=grp,
                      col=c("darkolivegreen","purple"),
                      data = mydf, layout = c(2,10), type = c("g", "h"),
                      lwd = 4, as.table=TRUE))

enter image description here


@ Ben,谢谢,AS.TABLE可以使用,但是列不会产生我想要的效果。我不想将不同的颜色放在交替值上,而是放在交替面板上... - jon
我以为我的解决方案就是这样做的。这张图片(刚刚添加的)不是你想要的吗?(你忘记了“groups”规范吗?) - Ben Bolker
我想要的合理布局是1Chr1跟随2chr2,1chr2跟随2chr2......以此类推.... - jon
这个注释对我来说不是很清晰。我理解为2chr2,1chr1,2chr2,1chr2...也许你的意思是2chr1,1chr1,2chr2,1chr2...(更有意义,但我仍然不明白为什么2chr会在1chr之前) - Ben Bolker
每个grp = 1:2,应该按照chr的每个级别进行分组,尽管我的意图是将它们组合成一个单一的名称,例如var = paste(grp, "chr", chr, sep = "")。 - jon
请参见上面修订后的代码(如果 outer 语句中的顺序更合理,请将 2:1 更改为 1:2)。 - Ben Bolker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接