如何计算网格轴限制?

fde*_*sch 3 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")
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

不幸的是,面板限制作为归一化父坐标返回,这使得无法获得“真实”限制。任何建议将不胜感激!

更新:
使用 base-R plot,默认情况下,数据范围(以及轴限制)在每侧扩展 4%,请参阅?par。但是这个因素似乎不适用于“格子”对象。所以我正在寻找的是类似于在par.

Ben*_*nes 5

轴限制xyplotextend.limits函数中计算。这个函数不是从点阵包中导出的,所以要查看它,请输入lattice:::extend.limits. 关于数值向量,此函数被传递来自相应数据(c(1, 10)在本例中)的值范围。最终限值根据以下公式计算:

lim + prop * d * c(-1, 1)
Run Code Online (Sandbox Code Playgroud)
  • lim 是数据的限制,在这种情况下 c(1, 10)
  • proplattice.getOption("axis.padding")$numeric,默认情况下是0.07
  • ddiff(as.numeric(lim)),在这种情况下9

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

如果您有兴趣,从xyplotto的调用堆栈extend.limits

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