当前位置:  开发笔记 > 编程语言 > 正文

当最后一行的面板数少于列数时的xyplot底轴

如何解决《当最后一行的面板数少于列数时的xyplot底轴》经验,为你挑选了1个好方法。

考虑一个格子xyplotrelation='fixed'alternating=FALSEas.table=TRUE

如果面板的最后一行不完整(即,面板数少于布局的列数),则不会绘制x轴。例如,下图中的面板4没有x轴刻度/标签。

library(lattice)
d <- data.frame(x=runif(100), y=runif(100), grp=gl(5, 20))
xyplot(y~x|grp, d, as.table=TRUE, scales=list(alternating=FALSE, tck=c(1, 0)))

如何添加该轴?

理想情况下,我只希望轴在底部和左侧,而面板的不完整行在底部(与使用时不同as.table=FALSE,后者在顶部绘制不完整的行)。对于上面的示例,我希望将轴绘制在面板4的底部边框上,而不是与面板5的x轴对齐。

我知道可以通过例如基本图形方法轻松解决。我对晶格解决方案特别感兴趣。



1> Tal J. Levy..:

我不是专家,但我相信这可能会起作用。这个想法最初是在这里发布的。首先,我将重新生成示例:

library(lattice)
set.seed(1)
d <- data.frame(x=runif(100), y=runif(100), grp=gl(5, 20))

接下来,让我们定义一个控制面板设置的功能:

trellis.par.set(clip = list(panel = "off"))
myPan <- function(...){
    panel.xyplot(...)
    if(panel.number() == 4) {
        at = seq(0,1,by = 0.2)
        panel.axis("bottom", at = at, outside = T,
                    labels = T, half = F)
    }
    if(panel.number() == 5) {
        at = seq(0,1,by = 0.2)
        panel.axis("bottom",at = at, outside = T,
                   labels = T, half = F)
    }
}

现在到剧情:

xyplot(y~x|grp, d, as.table=TRUE, 
       scales = list(
           x = list(draw = F, relation="same"),
           y = list(tck=c(1,0), alternating=F)),
       layout = c(2,3),
       panel = myPan)

可以看出,在xyplot命令中我们要求不绘制x轴(draw = F),而是稍后面板调用myPan函数。在那里,我们特别要求绘制面板4和5的x轴。

输出

希望它能给您一些改进的方向。

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有