当前位置: 动力学知识库 > 问答 > 编程问答 >

r - How are trellis axis limits calculated?

问题描述:

Say I want to create an ordinary xyplot without explicitly specifying axis limits, then how are axis limits calculated?

The following line of code produces a simple scatter plot. However, axis limits do not exactly range from 1 to 10, but are slightly expanded to the left and right and top and bottom sides (roughly by 0.5).

library(lattice)

xyplot(1:10 ~ 1:10, cex = 1.5, pch = 20, col = "black",

xlab = "x", ylab = "y")

Is there any way to determine the factor by which the axes were expanded on each site, e.g. using trellis.par.get? I already tried the following after executing the above-mentioned xyplot command:

library(grid)

downViewport(trellis.vpname(name = "figure"))

current.panel.limits()

$xlim

[1] 0 1

$ylim

[1] 0 1

Unfortunately, the panel limits are returned as normalized parent coordinates, which makes it impossible to obtain the "real" limits. Any suggestions would be highly appreciated!

Update:

Using base-R plot, the data range (and consequently the axis limits) is by default extended by 4% on each side, see ?par. But this factor doesn't seem to apply to 'trellis' objects. So what I am looking for is an analogue to the 'xaxs' (and 'yaxs') argument implemented in par.

网友答案:

Axis limits for xyplot are calculated in the extend.limits function. This function isn't exported from the lattice package, so to see it, type lattice:::extend.limits. Concerning a numeric vector, this function is passed the range of values from the corresponding data (c(1, 10) in this example). The final limits are calculated according to the following equation:

lim + prop * d * c(-1, 1)
  • lim are the limits of the data, in this case c(1, 10)
  • prop is lattice.getOption("axis.padding")$numeric, which by default is 0.07
  • d is diff(as.numeric(lim)), in this case 9

The result in this case is c(0.37, 10.63)

In case you're interested, the call stack from xyplot to extend.limits is

  1. xyplot
  2. xyplot.formula
  3. limits.and.aspect
  4. limitsFromLimitList
  5. extend.limits
分享给朋友:
您可能感兴趣的文章:
随机阅读: