在本地坐标系中添加网格单元
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
我正在创建 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