在原生坐标系中添加网格单位

时间:2015-04-28 01:46:30

标签: r lattice r-grid

我正在创建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)原生的单位。

为什么单位加法以原生坐标系统的方式工作,为什么它与其他坐标系的工作方式不同?

1 个答案:

答案 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