使用R中的网格将单位从npc转换为本机

时间:2011-08-12 20:31:44

标签: r native lattice r-grid

我的问题的核心:

我正在尝试使用网格包的convertUnit,convertX和convertY函数将npc单位转换为本机单位。 (npc =归一化的父坐标,可能称为ndc单位,归一化设备坐标到基础图形R中的一些。我试图得到原生单位,其中绘制图的那些,所以就xlim和ylim单位而言。)然而,当我试图这样做时:

> xyplot(1:10~1:10)
> convertX(unit(.9, "npc"), "native")
[1] 484.2native

当我期待一个接近9的数字作为原生x坐标时。看来convertX正在以设备坐标/像素为单位返回单位。

推理: 我正在尝试使用基本定位器类型设备返回npc坐标,并从那些npc坐标转换为绘制图形的本机坐标。虽然我可以使用基本图形的定位器或grid.locator,但我试图通过从npc转换回本机来扩展这个新的非阻塞定位器的功能到网格/点阵图形。 convertUnit和convertY也不起作用。

问题 网格是否有可能从npc转换回活动绘图窗口的原生坐标?为什么convertX返回像素而不是原生坐标?

非常感谢。

编辑标签和马虎错误之前遗漏了xyplot。我道歉,但它与xyplot一致。

2 个答案:

答案 0 :(得分:1)

'“native”'位置和尺寸是相对于视口的'xscale'和'yscale'。 转换发生在当前视口中。

> plot(1:10)
> convertX(unit(.9,"npc"),"native")
[1] 453.6native
> pushViewport(viewport())
> convertX(unit(.9,"npc"),"native")
[1] 0.9native
> convertX(unit(.1,"npc"),"picas")
[1] 4.21575picas #making window smaller
> convertX(unit(.1,"npc"),"picas")
[1] 1.9798375984252picas #making window larger
> convertX(unit(.1,"npc"),"picas")
[1] 5.25783218503937picas

所以你首先需要一个视口来获得合理的价值。

答案 1 :(得分:0)

显然,在按下视口后,它已经忘记了底层绘图的设置坐标,新坐标似乎等于npc坐标。

在您绘制到新视口之前,之后您将回到原点:

xyplot(1:10 ~ 10:1)
> convertX(unit(.9, "npc"), "native")
[1] 605.7native
> pushViewport(viewport())
> convertX(unit(.9, "npc"), "native")
[1] 0.9native
> xyplot(1:10 ~ 10:1)
> convertX(unit(.9, "npc"), "native")
[1] 605.7native

是否可以获得与实际绘制x和y的坐标相对应的坐标?