使主标签变量并将其基于我的条件变量

时间:2013-12-28 00:54:09

标签: r lattice

我正在生成一个以某个变量为条件的xyplot。我不希望条件变量在面板标签中可见,但我希望它作为主标签的一部分可见。我想在main中添加一个变量,以便每个页面上的main(我的布局是c(1,1))根据我的条件变量有不同的文本。这是我的代码示例。

xyplot(counts ~ time|conditioningvariable,
data = test.df,
pch=".",cex=1.5,
ylab="Counts (n)",
xlab="Time (sec)",
main=paste("Count By Time for ",conditioningvariable,sep=" "),
layout=c(1,1),scales=list(relation="free"),
strip=FALSE)

我知道如果我想在每个面板上更改此文本,我将不得不使用面板功能,但我不知道如何去做。我知道这可能非常简单。非常感谢解决方案。

1 个答案:

答案 0 :(得分:0)

也许:

... , 
main = substitute(expression(Count~By~Time~'for'~X), list(X=conditioningvariable) ),
... ,
strip = strip.custom(strip.levels=c(FALSE,FALSE), strip.names=c(FALSE,FALSE)), 
... ,

经过测试的解决方案而不是在提供可重现数据时提供的猜测。

除非在全局环境中还有一个名为conditioningvariable的对象,否则这将无效。它不会从xyplot调用中恢复该值。我使用了虹膜数据集和帮助页面中的示例,发现上述猜测不会成功。调节级别存储在xyplot $condlevel as documented here的结果中。 (事实证明我的记忆失败了,因为我是那次交流的一部分。)所以两步过程成功了:

X <- xyplot(Petal.Length ~ Petal.Width | Species, iris,
           main = substitute(expression(Count~By~Time~'for'~X), list(X='Species') ) )

xyplot(Petal.Length ~ Petal.Width | Species, iris, 
       main = substitute(expression(Count~By~Time~'for'~X), list(X=names(X$condlevel)) )
       )

事实证明,您可以使用单个FALSE值来抑制级别或条件名称。

这将打印一个看起来不像每页不同条件级别的“标题”:

X <- xyplot(Petal.Length ~ Petal.Width | Species, iris,
pch=".",cex=1.5,
ylab="Counts (n)",
xlab="Time (sec)", layout=c(1,1,3) ,
scales=list(relation="free"),
strip=function(...){ ltext(.5,.5,paste("Count By Time for ", levels(iris$Species)[panel.number() ]))})
print(X)

最多使用main="\n"ltext(.5, 1, ...)`。