文档章节

R语言grid包中viewport的概念

Betty__
 Betty__
发布于 2016/10/21 16:23
字数 732
阅读 98
收藏 0
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这个工具,我们就可以很灵活的在图形中画出任意区域分割的子图了。

本文转载自:http://www.dataguru.cn/thread-589874-1-1.html

Betty__
粉丝 7
博文 360
码字总数 46678
作品 0
武汉
私信 提问
ggplot2学习笔记系列之利用ggplot2绘制误差棒及显著性标记

绘制带有误差棒的条形图 library(ggplot2) #创建数据集 df <- data.frame(treatment = factor(c(1, 1, 1, 2, 2, 2, 3, 3, 3)), response = c(2, 5, 4, 6, 9, 7, 3, 5, 8), group = factor(c......

R语言中文社区
2018/02/12
0
0
使用ggplot2绘制心形

作者简介Introduction 林筱越:华东政法大学 社会学专业 R语言爱好者 由于最近在学习Hadley大神的《R for data science》和Winston Chang的《R graphics cookbook》,并且受到傅兴[R图秀:情...

R语言中文社区
2018/02/26
0
0
ggplot2学习笔记系列之主题(theme)设置

上次提了下theme(),本文将专门讲解一下。凡是与数据无关的图形设置可以归为主题类,ggplot2中主题设置十分多,根本不可能讲解完,只能稍微讲点皮毛,灵活运用才是关键,本文只是总体上略作介...

R语言中文社区
2018/02/27
0
0
利用ComplexHeatmap绘制热图(一)

作者简介 taoyan:R语言中文社区特约作家,伪码农,R语言爱好者,爱开源。 个人博客: https://ytlogos.github.io/ 简介 Complexheatmap是由顾祖光博士创建的绘制热图的R包,在他的GitHub有十...

R语言中文社区
2018/07/24
0
0
R语言深度学习包有哪些????

R语言深度学习的包有哪些???求大神告知R语言深度学习的包有哪些?R语言深度学习的包有哪些???求大神告知R语言深度学习的包有哪些?R语言深度学习的包有哪些???求大神告知R语言深度学...

pb加油
2016/08/31
235
0

没有更多内容

加载失败,请刷新页面

加载更多

读书replay《maven实战》.1.20190526

前情提要 maven这个工具用了好久了,但是一直都用的迷迷糊糊的,没有对它进行过系统性的学习,只是知道一些常用的功能怎么实现,所以20190516这一天我从JD购买了徐晓斌老师所著的《maven实战...

wanxiangming
32分钟前
0
0
真实项目案例实战——【状态设计模式】使用场景

什么是状态模式 状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。 状态模式应用场景 1.一个对象的行为取决于它的状态,并且它必须在运行时刻根...

须臾之余
39分钟前
1
0
Java 实现把字符串转换成整数【底层实现】

https://blog.csdn.net/zl18310999566/article/details/80263396

qimh
42分钟前
0
0
IDEA的debugger

1、win下节省内存空间 3、条件断点

一只小青蛙
53分钟前
3
0
炸!亿级数据DB秒级平滑扩容

一步一步,娓娓道来。 一般来说,并发量大,吞吐量大的互联网分层架构是怎么样的? 数据库上层都有一个微服务,服务层记录“业务库”与“数据库实例配置”的映射关系,通过数据库连接池向数据...

编程SHA
59分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部