假设我想创建一个普通的xyplot
而没有明确指定轴限制,那么如何计算轴限制?
以下代码行生成一个简单的散点图。但是,轴限制的范围不是1到10,而是略微扩展到左右和上下两侧(大致为0.5)。
library(lattice)
xyplot(1:10 ~ 1:10, cex = 1.5, pch = 20, col = "black",
xlab = "x", ylab = "y")
有没有办法确定在每个网站上展开轴的因素,例如:使用trellis.par.get
?执行上述xyplot
命令后,我已经尝试了以下命令:
library(grid)
downViewport(trellis.vpname(name = "figure"))
current.panel.limits()
$xlim
[1] 0 1
$ylim
[1] 0 1
不幸的是,面板限制作为标准化的父坐标返回,这使得无法获得"真实的"限制。任何建议都将受到高度赞赏!
更新
使用base-R plot
,数据范围(以及轴限制)默认情况下每边扩展4%,请参阅?par
。但这个因素似乎并不适用于“格子”。对象。所以我正在寻找的是类似于' xaxs' (和' yaxs')参数在par
中实现。
答案 0 :(得分:4)
xyplot
的轴限制在extend.limits
函数中计算。此功能不会从网格包导出,因此要查看它,请键入lattice:::extend.limits
。关于数字向量,此函数从相应数据(此示例中为c(1, 10)
)传递值范围。最终限制根据以下等式计算:
lim + prop * d * c(-1, 1)
lim
是数据的限制,在本例中为c(1, 10)
prop
为lattice.getOption("axis.padding")$numeric
,默认为0.07
d
为diff(as.numeric(lim))
,在本例中为9
这种情况下的结果是c(0.37, 10.63)
如果您感兴趣,从xyplot
到extend.limits
的调用堆栈是
xyplot
xyplot.formula
limits.and.aspect
limitsFromLimitList
extend.limits