考虑一个格子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)))
Run Code Online (Sandbox Code Playgroud)
如何添加该轴?
理想情况下,我只希望轴在底部和左侧,而面板的不完整行在底部(与使用时不同as.table=FALSE,后者在顶部绘制不完整的行)。对于上面的示例,我希望将轴绘制在面板4的底部边框上,而不是与面板5的x轴对齐。
我知道可以通过例如基本图形方法轻松解决。我对晶格解决方案特别感兴趣。
我不是专家,但我相信这可能会起作用。这个想法最初是在这里发布的。首先,我将重新生成示例:
library(lattice)
set.seed(1)
d <- data.frame(x=runif(100), y=runif(100), grp=gl(5, 20))
Run Code Online (Sandbox Code Playgroud)
接下来,让我们定义一个控制面板设置的功能:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
现在到剧情:
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)
Run Code Online (Sandbox Code Playgroud)
可以看出,在xyplot命令中我们要求不绘制x轴(draw = F),而是稍后面板调用myPan函数。在那里,我们特别要求绘制面板4和5的x轴。
希望它能给您一些改进的方向。