在本地坐标系中添加网格单元

adding grid units in the native coordinate system

我正在创建 lattice 图形并使用 grid 包对其进行注释。为了设置图形的坐标,我使用了 unit()grid 包中的相关函数。将单元加在一起通常会有所帮助,这通常没有问题。但是我发现当我尝试添加本机单位并且当前视口的 x 和 y 尺度没有 0 的下限时出现了一个奇怪的问题。这是一个小例子:

library(grid)
library(lattice)

# Expected result
xyplot(0:10 ~ 0:10, ylim=c(0,10))
myVP <- seekViewport("plot_01.panel.1.1.vp")  
y1   <- unit(5, "native") + unit(2.5, "native")
convertY(y1, "native")  # 7.5native, as expected

# Strange result
xyplot(10:20 ~ 0:10, ylim = c(10:20))
myVP <- seekViewport("plot_01.panel.1.1.vp")  
y2   <- unit(10, "native") + unit(5, "native")
convertY(y2, "native")  # 5native (why not 15native?)

# Other results with same lattice plot are as expected
convertY(unit(10, "npc")    + unit(5, "npc"), "npc")     # 15npc
convertY(unit(10, "mm")     + unit(5, "mm"),  "mm")      # 15mm
convertY(unit(10, "native") + unit(5, "mm"),  "native")  # ~10.35native

进一步调查表明,unit() 在以本机单位进行加法时正在减去 min(ylim)。所以,在这个例子中,我预计 unit(10, "native") + unit(5, "native") 会产生一个单位 15native,但它实际上会产生一个单位 (15-10)native.

为什么单位加法在本地坐标系中以这种方式工作,为什么在其他坐标系中以不同的方式工作?

Josh O'Brien 在他的评论中指出了答案,Paul Murrell 的 "locndimn" 插图(运行 vignette("locdimn") 提供了详细信息。数量如 unit(5, "native")如果指的是坐标系中的位置,则具有一种含义;如果指的是维度,则具有不同的含义。Murrell 的规则是 "locations are added like vectors and dimensions are added like lengths,",这似乎解释了我在本机中添加单位时得到的结果坐标系。

具体来说,在我的示例中,使用 convertHeight 会产生我预期的结果:

library(lattice)
xyplot(10:20 ~ 0:10, ylim = c(10:20))
myVP <- seekViewport("plot_01.panel.1.1.vp")  
y2   <- unit(10, "native") + unit(5, "native")
convertY(y2, "native")       #  5native 
convertHeight(y2, "native")  # 15native