博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
R语言grid包中viewport的概念
阅读量:6983 次
发布时间:2019-06-27

本文共 1771 字,大约阅读时间需要 5 分钟。

hot3.png

R语言grid包中viewport的概念。
首先载入包。
library(grid)
  • 1
viewport简单说就是图形中一块矩形区域,是在这个区域中进一步绘图的基础。下面的代码新建一个viewport对象,并将其push为当前viewport。
# 新建一个空白的图形grid.newpage()# 新建一个viewportvp <- viewport(x = 0.5, y = 0.5, width = 0.5, height = 0.25, angle=45)# 现在图形中什么都没有,我们需要将对象vp push到图形中pushViewport(vp)# 此时图形仍是空白,我们可以画个矩形在vp中grid.rect()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
注意在上面,我们获得了一个新的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")))
  • 1
  • 2
注意,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, y = 0.5, width = 0.4, height = 0.8,                   gp = gpar(col = colvec))    pushViewport(vp)    grid.rect()}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
可以看出每次在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, y = 0.5, width = 0.4, height = 0.8,                   gp = gpar(col = colvec, fill = NA))    pushViewport(vp)    grid.rect()    upViewport()}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
注意上面我们设置了矩形的参数fill=NA,将矩形的填充设置为透明的。在上面的代码中,由于每次都使用了upViewport,所以每次push到图形中的viewport都有共同的父viewport节点。除了上面的upViewport,还有一系列的函数可以在viewport树灵活变换当前viewport:
  • popViewport:与上面使用的upViewport不同,popViewport会从树中移除当前的viewport,然后返回父节点viewport。
  • downViewport:从viewport树当前位置向下搜索。
  • seekViewport:在viewport树中任意位置搜索。
     
具体的使用方法可以查阅help文档。
有了viewport这个工具,我们就可以很灵活的在图形中画出任意区域分割的子图了。

转载于:https://my.oschina.net/Bettyty/blog/761807

你可能感兴趣的文章
计算机硬件 — 计算机简介
查看>>
关于重写session实现的时候可能会导至nginx 502的问题
查看>>
7z(p7zip)压缩软件在Linux下的安装和使用
查看>>
jetbrick-template 1.1.0 发布,支持 #tag, #macro, layout
查看>>
TCP的六个控制位
查看>>
进制转换
查看>>
我的友情链接
查看>>
新书上市:《FLUENT 14.0超级学习手册》
查看>>
mysql数据库query cache
查看>>
使用docker commit 来扩展一个image
查看>>
jsp 防止sql注入 之 preparestatement篇(转载)
查看>>
Linux之Ansible入门用法(实验解析)
查看>>
Linux系统如何在开机时修改root密码
查看>>
Anychat的绝对路径与相对路径
查看>>
我的友情链接
查看>>
如何使用网络库实现应用级消息收发
查看>>
Single Area OSPF
查看>>
rhel6之yum
查看>>
selenium+ant+testng测试框架简单介绍
查看>>
自己写的DBUtil数据库连接工具类
查看>>