如何计算格子轴限制?

时间:2015-03-05 14:13:25

标签: r lattice trellis

假设我想创建一个普通的xyplot而没有明确指定轴限制,那么如何计算轴限制?

以下代码行生成一个简单的散点图。但是,轴限制的范围不是1到10,而是略微扩展到左右和上下两侧(大致为0.5)。

library(lattice)
xyplot(1:10 ~ 1:10, cex = 1.5, pch = 20, col = "black", 
       xlab = "x", ylab = "y")

xyplot_axis_extension

有没有办法确定在每个网站上展开轴的因素,例如:使用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中实现。

1 个答案:

答案 0 :(得分:4)

xyplot的轴限制在extend.limits函数中计算。此功能不会从网格包导出,因此要查看它,请键入lattice:::extend.limits。关于数字向量,此函数从相应数据(此示例中为c(1, 10))传递值范围。最终限制根据以下等式计算:

lim + prop * d * c(-1, 1)
  • lim是数据的限制,在本例中为c(1, 10)
  • proplattice.getOption("axis.padding")$numeric,默认为0.07
  • ddiff(as.numeric(lim)),在本例中为9

这种情况下的结果是c(0.37, 10.63)

如果您感兴趣,从xyplotextend.limits的调用堆栈是

  1. xyplot
  2. xyplot.formula
  3. limits.and.aspect
  4. limitsFromLimitList
  5. extend.limits