R语言grid包使用笔记——viewport
2015-08-01 17:19
267 查看
这里介绍R语言grid包中viewport的概念。
首先载入包。
viewport简单说就是图形中一块矩形区域,是在这个区域中进一步绘图的基础。下面的代码新建一个viewport对象,并将其push为当前viewport。
注意在上面,我们获得了一个新的viewport,但是图形中什么也没有。我们需要使用pushViewport函数来将其push到图形中。但是此时仍然是空白图像。所以我们用grid.rect函数在当前的viewport中画一个矩形,默认情况下grid.rect画出viewport的边界。
下面的代码可以画出一个viewport的示例,带有一些辅助的说明。
注意,gird包为每个图形对象保存了一个viewport对象构成的树。每次使用pushViewport都会将一个新的viewport添加到树中,作为树中的当前节点(当前viewport)。例如下面我们连续push三个viewport到一个图形中。
可以看出每次在push一个viewport对象时,其操作都是相对于树中的当前viewport,也就是其位置设定都是相对于上次push到图形中的viewport。当然,我们还可以使用upViewport回到树中当前viewport的上一级viewport,也就是当前节点的父节点。我们可以将上面的代码略加修改产生不同的结果。
注意上面我们设置了矩形的参数fill=NA,将矩形的填充设置为透明的。在上面的代码中,由于每次都使用了upViewport,所以每次push到图形中的viewport都有共同的父viewport节点。除了上面的upViewport,还有一系列的函数可以在viewport树灵活变换当前viewport:
popViewport:与上面使用的upViewport不同,popViewport会从树中移除当前的viewport,然后返回父节点viewport。
downViewport:从viewport树当前位置向下搜索。
seekViewport:在viewport树中任意位置搜索。
具体的使用方法可以查阅help文档。
有了viewport这个工具,我们就可以很灵活的在图形中画出任意区域分割的子图了。
首先载入包。
library(grid)
viewport简单说就是图形中一块矩形区域,是在这个区域中进一步绘图的基础。下面的代码新建一个viewport对象,并将其push为当前viewport。
# 新建一个空白的图形 grid.newpage() # 新建一个viewport vp <- viewport(x = 0.5, y = 0.5, width = 0.5, height = 0.25, angle=45) # 现在图形中什么都没有,我们需要将对象vp push到图形中 pushViewport(vp) # 此时图形仍是空白,我们可以画个矩形在vp中 grid.rect()
注意在上面,我们获得了一个新的viewport,但是图形中什么也没有。我们需要使用pushViewport函数来将其push到图形中。但是此时仍然是空白图像。所以我们用grid.rect函数在当前的viewport中画一个矩形,默认情况下grid.rect画出viewport的边界。
下面的代码可以画出一个viewport的示例,带有一些辅助的说明。
grid.show.viewport(viewport(x = 0.6, y = 0.6, w = unit(1, "inches"), h = unit(1, "inches")))
注意,gird包为每个图形对象保存了一个viewport对象构成的树。每次使用pushViewport都会将一个新的viewport添加到树中,作为树中的当前节点(当前viewport)。例如下面我们连续push三个viewport到一个图形中。
grid.newpage() colvec <- c('red', 'green', 'blue') xvec <- c(0.3, 0.5, 0.7) for (i in 1 : 3) { vp <- viewport(x = xvec[i], y = 0.5, width = 0.4, height = 0.8, gp = gpar(col = colvec[i])) pushViewport(vp) grid.rect() }
可以看出每次在push一个viewport对象时,其操作都是相对于树中的当前viewport,也就是其位置设定都是相对于上次push到图形中的viewport。当然,我们还可以使用upViewport回到树中当前viewport的上一级viewport,也就是当前节点的父节点。我们可以将上面的代码略加修改产生不同的结果。
grid.newpage() colvec <- c('red', 'green', 'blue') xvec <- c(0.3, 0.5, 0.7) for (i in 1 : 3) { vp <- viewport(x = xvec[i], y = 0.5, width = 0.4, height = 0.8, gp = gpar(col = colvec[i], fill = NA)) pushViewport(vp) grid.rect() upViewport() }
注意上面我们设置了矩形的参数fill=NA,将矩形的填充设置为透明的。在上面的代码中,由于每次都使用了upViewport,所以每次push到图形中的viewport都有共同的父viewport节点。除了上面的upViewport,还有一系列的函数可以在viewport树灵活变换当前viewport:
popViewport:与上面使用的upViewport不同,popViewport会从树中移除当前的viewport,然后返回父节点viewport。
downViewport:从viewport树当前位置向下搜索。
seekViewport:在viewport树中任意位置搜索。
具体的使用方法可以查阅help文档。
有了viewport这个工具,我们就可以很灵活的在图形中画出任意区域分割的子图了。
相关文章推荐
- cocos2dx游戏加密
- 支持向量机: Kernel
- 基本排序方法之六——堆排序
- HDU_1017_E
- gem5: 使用ruby memory system中的mesh结构 出现AssertionError错误
- 组策略与安全设置
- HDU 1312 Red and Black 第一题搜索!
- 详解HTML编程的标记与文档结构
- java里面的xx.jar和.net里面的xx.dll有什么异同
- ACdream1084
- 1029. Median (25)
- PDF在xp或2003下正常在win7下乱码的问题
- [转]oracle 12c 中的分页子句
- Number Sequence
- Android设计模式系列--工厂方法模式
- ios 为图片加上水印详解
- UVA 11205 The broken pedometer ------二进制枚举
- 优秀程序员必须知道的32个算法,提高你的开发效率
- 个人总结的一些面试技巧
- Pixhawk---sdlog2应用详解