考虑一个格子xyplot
有relation='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)))
如何添加该轴?
理想情况下,我只希望轴在底部和左侧,而面板的不完整行在底部(与使用时不同as.table=FALSE
,后者在顶部绘制不完整的行)。对于上面的示例,我希望将轴绘制在面板4的底部边框上,而不是与面板5的x轴对齐。
我知道可以通过例如基本图形方法轻松解决。我对晶格解决方案特别感兴趣。
我不是专家,但我相信这可能会起作用。这个想法最初是在这里发布的。首先,我将重新生成示例:
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轴。
希望它能给您一些改进的方向。