使用panel.text
或ltext
参数非常清楚How to label panels in lattice。但是,如果我想为格子中的每个面板使用不同的,唯一的标签,该怎么办?让我用简化的Dotplot
:
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()
此代码给出了下图:
上面板获得正确的标签(“不太可能”和“可能”),但下面板只会获得上面板标签的副本。相反,我想在下面板中绘制剩余的标签(“简单”,“困难”),但与上面板位于相同的位置。
我知道我可以使用ltext
参数为每个标签分别定义每个标签,但考虑到我的“真实”情节(heh)有更多的面板和更多不同的独特标签,这是非常不切实际的解决方案。有什么建议?莱迪思只是请。
答案 0 :(得分:3)
(很高兴看到一个很好的格子问题。)我不同意agstudy下标将是一个很好的索引策略。在这种情况下,它们是偶然的,因为您的点数与标签的数量相同,顺序相同。下标是为面板选择单个数据点的机制,而不是用于索引面板的机制。考虑使用packet.number()
或panel.number()
函数。在这种情况下,我相信它们会返回相同的值,但如果您考虑到更复杂的条件因素,请查阅其共享帮助页面:
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)}
})
如果您的标签位于矩阵中,则可以很容易地使用“[”。
进行索引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()
答案 1 :(得分:2)
我认为你正在寻找subscripts
论点:
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])
})
答案 2 :(得分:0)
我没有足够的声誉来评论,但我想为那些使用POSIXct日期的人添加一个小的调整,以建立@ 42-。注意:我不是开发人员,编码人员或声称这将适用于每个数据集/用户 - 这只是我需要的黑客。
如果在x轴上使用日期时需要向多个绘图添加文本,则必须将as.POSIXct函数添加到指示文本位置的指定日期。我还包括panel.xyplot来演示,因为您必须指定您正在使用的绘图类型。在示例中,我在每个面板上放置了两个标签(在OP示例中预先指定)在同一y的两个面板上。
示例:
panel = function(x, y,...) {
panel.xyplot(x, y,...)
if(packet.number()==YOUR 1ST PANEL){ ltext(c(as.POSIXct("YOUR 1ST DATE"), as.POSIXct("YOUR 2ND DATE")), YOUR Y VALUE, labels = YOUR LABELS)}
if(packet.number()==YOUR 2ND PANEL){ ltext(c(as.POSIXct("YOUR 1ST DATE"), as.POSIXct("YOUR 2ND DATE")), YOUR Y VALUE, labels = YOUR LABELS)}
})
希望这对某人有用。欢呼声。