R 向晶格中的每个面板添加不同的唯一标签

R 向晶格中的每个面板添加不同的唯一标签,r,plot,label,lattice,R,Plot,Label,Lattice,使用panel.text或ltext参数非常清楚。但是,如果我想为lattice中的每个面板使用不同的、唯一的标签,该怎么办?让我用这个简化的点图来说明我的观点: library(Hmisc) #example data data <- data.frame(transport=rep(c("bicycle","bus"),each=2), att=rep(c("behaviour control","intention"),2),

使用
panel.text
ltext
参数非常清楚。但是,如果我想为lattice中的每个面板使用不同的、唯一的标签,该怎么办?让我用这个简化的点图来说明我的观点:

library(Hmisc)
#example data
data <- data.frame(transport=rep(c("bicycle","bus"),each=2), 
                   att=rep(c("behaviour control","intention"),2),
                   value=c(4.134,4.5,3.77,2.4), Lo=c(3.92,4.37,3.51,2.2),
                   Hi=c(4.34,4.62,4.02,2.61))
#labels I want to use
labels.hi=c("likely","easy")
labels.lo=c("unlikely","difficult")
#example dotplot
png("test.png",width=300, height=400)
Dotplot(transport ~ Cbind(value, Lo, Hi) | att, data, col=1,
        panel = function(x, y,...) {
          panel.Dotplot(x, y,...)
          ltext(2.5,1.5, labels=labels.lo)
          ltext(4.5,1.5, labels=labels.hi)
        })
dev.off()
库(Hmisc)
#示例数据

数据我认为您正在寻找
下标
参数:

labels=c("likely","easy","unlikely","difficult")
#example dotplot
Dotplot(transport ~ Cbind(value, Lo, Hi) | att, data, col=1,
        panel = function(x, y,subscripts,...) {
          panel.Dotplot(x, y,...)
          ltext(c(2.5,4.5),1.5, labels[subscripts])
        })
(很高兴看到一个好的晶格问题。)我不同意agstudy的观点,即下标将是一个好的索引策略。在这种情况下,它们是偶然工作的,因为您的点与标签的编号相同,并且顺序相同。下标是为面板拾取单个数据点的机制,而不是为面板编制索引的机制。考虑使用<代码>包。在本例中,我相信它们返回相同的值,但如果您有更复杂的条件因素,请参阅它们的共享帮助页面:

Dotplot(transport ~ Cbind(value, Lo, Hi) | att, data, col=1,
        panel = function(x, y,...) {
          panel.Dotplot(x, y,...)
          if(packet.number()==1){ ltext(c(2.5,4.5) ,1.5, labels= labels.lo)}
          if(packet.number()==2){ ltext(c(2.5,4.5) ,1.5, labels=labels.hi)}
        })
如果将标签放在矩阵中,则使用“[”索引将很容易


是的,没错。我也有同样的想法,尽管我倾向于将每个数据包的标签放在一个列表中,由
packet.number()
索引。通过使用多个条件变量,我可以将标签保存在
矩阵(list())
数组(list())
对象中,由
哪个.packet()索引
。我还不能肯定列表矩阵相对于矩阵(或数组)的优势字符元素。不确定是否有多大优势,当然,如果某些数据包包含的内部标签数量不同,列表会更好。但实际上,我只是讲述了我的想法,并指出,尽管我们的想法非常相似,但有一个(轻微的)另一种方法。我相信,特别是如果有小文本框来填充更复杂的内容。列表通常非常灵活。有了它们,传递和使用特定于标签的
gpar
指令也不会有太多工作,再举一个例子。
lab.mat=matrix(c( labels.hi,labels.lo), 2)
lab.mat
#     [,1]     [,2]       
#[1,] "likely" "unlikely" 
#[2,] "easy"   "difficult"

png("test.png",width=300, height=400)
Dotplot(transport ~ Cbind(value, Lo, Hi) | att, data, col=1,
        panel = function(x, y,...) {
          panel.Dotplot(x, y,...)
          { ltext(c(2.5,4.5) ,1.5, labels= lab.mat[packet.number(),])}
        })
dev.off()