我正在创建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)原生的单位。
为什么单位加法以原生坐标系统的方式工作,为什么它与其他坐标系的工作方式不同?
答案 0 :(得分:1)
Josh O'Brien在他的评论中指出了答案,Paul Murrell的“locndimn”小插图(运行vignette("locdimn")
提供了详细信息。如果引用某个位置,unit(5, "native")
这样的数量就有一个含义在坐标系中,如果它指的是维度,则有不同的含义.Murrell的规则是“像向量一样添加位置,像长度一样添加尺寸”,这似乎是我在添加单位时得到的结果。原生坐标系。
具体来说,在我的示例中,使用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