考虑具有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轴一致。
我知道这可以通过例如基本图形方法轻松解决。我对格子解决方案特别感兴趣。
答案 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轴。
希望它可以为你提供一些改进方向。
答案 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()
UIKeyboardWillShowNotification