R lattice - 尝试使用y.scale.components自定义更改标签颜色

时间:2013-05-03 11:55:36

标签: r colors labels lattice

我目前尝试通过更改其Y轴标签颜色来定制格子平行图,具体取决于这些相同标签的字符。我创建了一个自定义的y.scale.components函数,如许多书籍/论坛中所述。但是,在为ans $ left $ labels $ col参数指定新颜色矢量后,只有默认颜色(黑色)用于绘图。

以下是代码:

test2 <- read.table(textConnection("

         species  evalue l1 l2  l3
   Daphnia.pulex  1.0E-6 17 41  35
   Daphnia.pulex 1.0E-10 11 30  25
   Daphnia.pulex 1.0E-20  4 14  17
   Daphnia.pulex 1.0E-35  4  8  15
   Daphnia.pulex 1.0E-50  1  4   8
   Daphnia.pulex 1.0E-75  0  2   6
Ixodes.scapularis  1.0E-6  7 20 118
Ixodes.scapularis 1.0E-10  6 17 107
Ixodes.scapularis 1.0E-20  4  6  46
Ixodes.scapularis 1.0E-35  2  3  14
Ixodes.scapularis 1.0E-50  0  0   5
Ixodes.scapularis 1.0E-75  0  0   2
")->con,header=T);close(con)

#data.frame to assign a color to the data, depending on species names on y axis
orga<-c("Daphnia.pulex","Ixodes.scapularis")
color<-c("cornsilk2","darkolivegreen1" );
phylum<-c("arthropoda","arthropoda" );
colorChooser<-data.frame(orga,color,phylum)

#fonction for custom rendering of left y axis labels 
yscale.components.custom<-function(...) {
  ans<-yscale.components.default(...)
  #vector for new label colors, grey60 by default
  new_colors<-c()
  new_colors<-rep("grey60",length(ans$left$labels$labels))
  # the for() check all labels character and assign the corresponding color with the colorChooser data.frame
  n<-1
  for (i in ans$left$labels$labels) {
      new_colors[n]<-as.character(colorChooser$color[colorChooser$orga==i])
      #got the color corresponding to the label, with the colorChooser dataframe
  n<-n+1
  }
  print(length(new_colors))
  cat(new_colors,sep="\n")  #print the content of the generated color vector
  ans$left$labels$col<-new_colors  #assign this vector to col parameter
  ans
}

#plot everything
bwplot(   reorder(species,l1,median)~l1,
      data=test2,
      panel = function(..., box.ratio) {
            panel.grid(h=length(colnames(cdata[,annot.arthro]))-1,v=0,col.line="grey80")
            panel.violin(..., col = "white",varwidth = FALSE, box.ratio = box.ratio )
            panel.bwplot(..., fill = NULL, box.ratio = .07)
      },
      yscale.components=yscale.components.custom
)

这是cat()命令的输出,包含在yscale.components.custom函数中。如您所见,它输出两次颜色标签,但分配给ans $ left $ labels $ col的向量长度为​​2.是否有第二次调用设置Y轴标签颜色?它来自哪里?

[1] 2
darkolivegreen1
cornsilk2
[1] 2
darkolivegreen1
cornsilk2

欢迎任何帮助,我不明白为什么颜色被分配给ans $ left $ labels $ col但是所有内容都是用blacK绘制的。我也想改变小提琴的边框颜色,使用相同的colorChooser data.frame,但这是另一个故事......

1 个答案:

答案 0 :(得分:3)

在询问Deepayan Sarkar之后,在格子执行期间,ans $ left $ labels $ col值显然被忽略了。

我使用了“鳞片”参数的不同解决方案。不幸的是,我不能再依赖格子重新排序功能来按照中位数重新排序我的数据系列。

对于上面提到的代码,我手动订购它们,然后用相应的顺序创建一个颜色矢量。我不能再依赖格子重新排序(格子公式中的“重新排序”)。然后,我用

设置我的axix标签颜色
scales=list(col=c(color1,color2,...))