我正在使用bwplot在Lattice中制作盒子和胡须图。我想为means加分。我已经了解了如何使用panel.points对简单的绘图执行此操作。然而,当我使用+和outer=TRUE制作一个多面板的bwplot时,我不知道如何在不同的面板中放置不同的点。此示例说明了我尝试的解决方案的问题,但解决方案不起作用。(为了简单起见,它将“x”放在任意点上,而不是放在均值上。)
# make some data:
df <- data.frame(var1=rnorm(20), var2=runif(20), cat=rep(c("Z"),20))
# cat isn't doing anything, but I couldn't get the mwe to work without it.
bwplot(var1 + var2 ~ cat, data=df, pch="|", coef=0, outer=TRUE,
panel=function(data, ...){
panel.bwplot(...)
panel.points(x=c(.5,-.5), pch="x", cex=2)
}
)(结合使用outer=T和var1 + var2可以创建两个面板。请参见下面的更简单的示例。)
我得到的是两个面板,每个面板上都有一个盒子和胡须的图。“x”放置在每个图的上方。在每个面板中,绘图上方的.5处都有一个"x“。这个过程不是在第二个面板中使用-.5,而是重新开始--Lattice再次抓住第一个点.5。
如何在不同面板中的绘图上显示不同的点?
谢谢。
稍后补充:我现在意识到这个问题与+和outer=TRUE本身无关。使用常规的晶格条件作用可以获得相同的行为:
df <- data.frame(var1=rnorm(20), cat=rep("Z",20), cat2=rep(c("M","F"), 10))
bwplot(var1 ~ cat | cat2, data=df, pch="|", coef=0, outer=TRUE,
panel=function(data, ...){
panel.bwplot(...)
panel.points(x=c(.5,-.5), pch="x", cex=2)
}
)发布于 2013-04-05 03:33:29
您应该使用accesor函数panel.number()为每个面板选择x值:
df <- data.frame(var1=rnorm(20), cat=rep("Z",20), cat2=rep(c("M","F"), 10))
bwplot(var1 ~ cat | cat2, data=df, pch="|",
panel=function(...){
panel.bwplot(...)
panel.points(x=c(.5,-.5)[panel.number()],
pch="x", cex=2)
}
)编辑:但是,如果你想为means添加点数,你并不真的需要panel.number。您可以定义一个panel.mean函数(在example by Deepayan之后)来计算和绘制它们:
panel.mean <- function(x, y, ...) {
tmp <- tapply(y, factor(x), FUN = mean)
panel.points(tmp, pch = 20, ...)
}
bwplot(var1 ~ cat | cat2, data=df,
panel=function(...){
panel.bwplot(..., pch='|')
panel.mean(...)
}
)https://stackoverflow.com/questions/15803149
复制相似问题