如何计算网格轴限制?
How are trellis axis limits calculated?
假设我想创建一个普通的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
不幸的是,面板限制作为标准化父坐标返回,这使得无法获得 "real" 限制。任何建议将不胜感激!
更新:
使用 base-R plot
,数据范围(以及轴限制)默认在每一侧扩展 4%,请参见 ?par
。但是这个因素似乎不适用于 'trellis' 对象。所以我正在寻找的是 par
.
中实现的 'xaxs'(和 'yaxs')参数的模拟
xyplot
的轴限制在 extend.limits
函数中计算。这个函数不是从 lattice 包中导出的,所以要看到它,输入 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
假设我想创建一个普通的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
不幸的是,面板限制作为标准化父坐标返回,这使得无法获得 "real" 限制。任何建议将不胜感激!
更新:
使用 base-R plot
,数据范围(以及轴限制)默认在每一侧扩展 4%,请参见 ?par
。但是这个因素似乎不适用于 'trellis' 对象。所以我正在寻找的是 par
.
xyplot
的轴限制在 extend.limits
函数中计算。这个函数不是从 lattice 包中导出的,所以要看到它,输入 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