作者简介
作者:吴健 中国科学院大学 R语言、统计学爱好者,尤其擅长R语言和Arcgis在生态领域的应用分享
个人公众号:统计与编程语言
前文推送:
上一期我们已经对R语言绘制基本矩形框,文本和线条进行了介绍,本文将在上一期的基础上,通过自编函数快速绘制流程图。
第一步:自定义绘制基本矩形和文本的函数。利用该函数可以快速的根据字段的长度和宽度绘制相应的矩形框,该矩形框为流程图的基本图元。
tableBox <- function(labels, x=0.5, y=0.5) { nlabel <- length(labels)#确定标签个数 taplevp <- viewport(x=x, y=y, width=max(stringWidth(labels))+ unit(4, "mm"), height=unit(nlabel, "lines"))#根据标签的多少绘制矩形框 pushViewport(taplevp) grid.roundrect() if (nlabel > 1) { for (i in 1:(nlabel-1)) { fill <- c("white", "grey")[i%%2+1] grid.clip(y=unit(i, "lines"), just="bottom") grid.roundrect(gp=gpar(fill=fill)) } } grid.clip()#绘制灰色阴影 grid.text(labels, x=unit(2, "mm"), y=unit(nlabel:1-0.5, 'lines'),just='left')#添加文本 popViewport() }
第二步:确定矩形框在绘图窗口的位置,并以该位置为连接线的起点和终点,绘制带箭头的连接线。
boxGrob <- function(labels, x=0.5, y=0.5) { grob(labels=labels, x=x, y=y, cl="box") }#存储矩形框的基本信息 drawDetails.box <- function(x, ...) { tableBox(x$labels, x$x, x$y) }#确定矩形框的基本位置 xDetalis.box <- function(x, theta) { nlines <- length(x$labels) height <- unit(nlines, 'lines') width <- unit(4, "mm")+max(stringWidth(x$labels)) grobX(roundrectGrob(x=x$x, y=x$y, width=width, height=height), theta) }#确定矩形框在X轴的位置(东西方向) yDetalis.box <- function(x, theta) { nlines <- length(x$labels) height <- unit(nlines, 'lines') width <- unit(4, "mm")+max(stringWidth(x$labels)) grobY(rectGrob(x=x$x, y=x$y, width=width, height=height), theta) }#确定矩形框在Y轴的位置(南北方向)
第三步:以上述两个函数为基础绘制流程图
library(grid) #确定矩形框的大小和矩形框里面的标签 box1 <- boxGrob(c("book_author_table", "ID", "book", "author"),x=0.25) box2 <- boxGrob(c("book_table", "ISBN", "title", "pub"), x=0.6, y=0.75) box3 <- boxGrob(c("author_table", "ID", "name", "gender"), x=0.6, y=0.25) box4 <- boxGrob(c("publisher_table", "ID", "name","country"), x=0.85,y=0.75) box5 <- boxGrob(c("gender_table", "ID", "gender"), x=0.85,y=0.25) #绘制矩形框及标签 grid.draw(box1) grid.draw(box2) grid.draw(box3) grid.draw(box4) grid.draw(box5) #绘制不同矩形框之间的连接线 grid.curve(xDetalis.box(box1, "east"), yDetalis.box(box1, "south")+ unit(1.5, "lines") , xDetalis.box(box2, "west"), yDetalis.box(box2, "north")- unit(1.5, "lines") , inflect=TRUE, arrow=arrow(type="closed",angle=15,length=unit(2, "mm")),gp=gpar(fill="black")) grid.curve(xDetalis.box(box1, "east"), yDetalis.box(box1, "north") - unit(3.5, "lines"), xDetalis.box(box3, "west"), yDetalis.box(box3, "south") + unit(2.5, "lines"), inflect=T, square=T,curvature=-1, arrow=arrow(type="closed", angle=15, length=unit(2, "mm")), gp=gpar(fill="black")) grid.curve(xDetalis.box(box2, "east"), yDetalis.box(box2, "south") + unit(0.5, "lines"), xDetalis.box(box4, "west"), yDetalis.box(box4, "north") - unit(1.5, "lines"), inflect=TRUE, arrow=arrow(type="closed", angle=15, length=unit(2, "mm")), gp=gpar(fill="black")) grid.curve(xDetalis.box(box3, "east"), yDetalis.box(box3, "south") + unit(0.5, "lines"), xDetalis.box(box5, "west"), yDetalis.box(box5, "north")- unit(1.5, "lines"), inflect=TRUE, arrow=arrow(type="closed", angle=15, length=unit(2, "mm")), gp=gpar(fill="black"))
大家都在看
公众号后台回复关键字即可学习
回复 爬虫 爬虫三大案例实战
Python
1小时破冰入门
回复 数据挖掘 R语言入门及数据挖掘
回复 人工智能 三个月入门人工智能
回复 数据分析师 数据分析师成长之路
回复 机器学习 机器学习的商业应用
回复 数据科学 数据科学实战
常用算法
常用数据挖掘算法
本文由R语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。
以上所述就是小编给大家介绍的《R语言绘制流程图(二)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- yEd 3.21 发布,流程图绘制工具
- C++源码流程图分析!
- 自己调研的常用开源流程图组件
- gojs 流程图框架-编辑类模板(二)
- BPMN学习第一步:简单的流程图
- 使用markdown画流程图/甘特图 - Mermaid
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
XML Hacks
Michael Fitzgerald / O'Reilly Media, Inc. / 2004-07-27 / USD 24.95
Developers and system administrators alike are uncovering the true power of XML, the Extensible Markup Language that enables data to be sent over the Internet from one computer platform to another or ......一起来看看 《XML Hacks》 这本书的介绍吧!