作者简介
作者:吴健 中国科学院大学 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
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
PHP Cookbook
Adam Trachtenberg、David Sklar / O'Reilly Media / 2006-08-01 / USD 44.99
When it comes to creating dynamic web sites, the open source PHP language is red-hot property: used on more than 20 million web sites today, PHP is now more popular than Microsoft's ASP.NET technology......一起来看看 《PHP Cookbook》 这本书的介绍吧!
Base64 编码/解码
Base64 编码/解码
HEX CMYK 转换工具
HEX CMYK 互转工具