当最后一行具有比列少的面板时,xyplot底部轴

时间:2015-12-31 05:44:30

标签: r plot lattice

考虑具有xyplotrelation='fixed'alternating=FALSE的格子as.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)))

enter image description here

如何添加该轴?

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

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

2 个答案:

答案 0 :(得分:5)

我不是晶格专家,但我相信这可能有用。这个想法最初发布于here。首先,我将重新生成示例:

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轴。

输出

enter image description here

希望它可以为你提供一些改进方向。

答案 1 :(得分:2)

这是另一种基于@ user20650在(现已删除)答案中提供的代码的方法。它直接使用add_axes <- function() { library(grid) library(lattice) l <- trellis.currentLayout() pan <- which(l[nrow(l), ]==0) if(length(pan) > 0) { g <- grid.ls(print=FALSE) # use an existing panel as a template for ticks ticks <- grid.get(g$name[grep("ticks.bottom.panel", g$name)][[1]]) # use an existing panel as a template for labels labels <- grid.get(g$name[grep("ticklabels.bottom.panel", g$name)][[1]]) ax <- grobTree(ticks, labels) invisible(sapply(pan, function(x) { trellis.focus("panel", x, nrow(l)-1, clip.off=TRUE) grid.draw(ax) trellis.unfocus() })) } } ,专注于缺少轴(或至少假设缺少轴)的活动网格图的面板,并添加它们。我们还假设x尺度是固定的。

该功能(也作为要点outlined in the reference存在):

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(tck=c(1,0), alternating=FALSE), 
       layout=c(4, 2), xlim=c(-0.1, 1.1))

一个例子:

add_axes()

here

UIKeyboardWillShowNotification

enter image description here