1

我是一名尝试使用 R 图形的 GKS 时代的图形程序员。我有两个与 R 中的转换有关的问题:

  1. 我想知道是否有在 R 中构建查看管道的等价物,可以将世界坐标 [wc] 中的窗口映射到设备坐标 [dc] 中的视口。例如,我可以指定一个转换 t,它将 (wcxmin, wcxmax, wcymin, wcymax) 的窗口映射到 (vpxmin, vpxmax, vpymin, vpymax) 其中 wc 是 (1000, -50, 40, 90) 并且 vp 是 (0 , 800, 0, 600)。目标是所有图形计算都在 wc 中完成,但图形引擎在 dc 中呈现它。在这种情况下,它将适当地缩放坐标,并将 x 轴翻转为 wcxmin > wcxmax。

  2. 是否存在等效的图形段,然后可以通过变换矩阵进行变换 [sclae、shift、rotate 和可能的剪切]。

我确信我在 R 图形中遗漏了一些非常基本的东西。我可以在 SVG 中成功构建这样的转换,没有任何问题。我一直在研究 grid、lattice、ggplot2 等软件包,但没有取得太大进展。

谢谢。

这是我正在尝试做的一些示例代码:

distn<-rnorm(100)
distw<-rweibull(100, shape=2)
dret<-stack(list(norm=distn, weib=distw))
n<-0
for (idx in levels(dret$ind)) {
        pct<-dret[dret$ind == idx,c('values')]
        # scale and shift the data
        pct<-(pct-min(pct))/(max(pct) - min(pct))
        if (n == 0) {
                # top left
                par(fig=c(0,0.5,0.5,1))
                limx<-c(0,1)
        } else  {
                # bottom right
                par(fig=c(0.5,1,0,0.5), new=TRUE)
                limx<-c(1,0)
        }
        fp<-density(pct)
        sfx<-fp$x
        sfy<-(fp$y-min(fp$y))/(max(fp$y)-min(fp$y))
        sortpct<-sort(pct)
        ecdfpct<-(1:length(sortpct))/length(sortpct)
        plot(sortpct, ecdfpct, xlim=limx, type="l", col="green")
        lines(sfx, sfy, xlim=limx, type="l", col="red")
        n<-n+1
}

我想将右下象限的图形旋转-90度。

4

1 回答 1

0

'grid' 包一直都是这样做的。视口在 X 和 Y 方向(有时是 Z)和函数上都表示为 [0, 1],convertX并被convertY调用以从用户坐标移动到网格坐标。输入help(grid)设施的完整列表。使用线框或水平图时也表示第三个维度。通过齐次坐标的变换是通过 4 x 4 矩阵完成的,该矩阵存储为以current.transform( current.viewport()). 您可以通过查看trans3d. 我看到@nograpes 已经为您指出了grid::pushViewport函数中的高级轮换工具。

于 2012-08-19T20:36:14.023 回答