作者简介
作者:吴健 中国科学院大学 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
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
破茧成蝶:用户体验设计师的成长之路
刘津、李月 / 人民邮电出版社 / 2014-7 / 69.00
市面上已经有很多专业的用户体验书籍,但解决用户体验设计师在职场中遇到的众多现实问题的图书并不多见。本书从用户体验设计师的角度出发,系统地介绍了其职业生涯中的学习方法、思维方式、工作流程等,覆盖了用户体验设计基础知识、设计师的角色和职业困惑、工作流程、需求分析、设计规划和设计标准、项目跟进和成果检验、设计师职业修养以及需要具备的意识等,力图帮助设计师解决在项目中遇到的一些常见问题,找到自己的职业成长......一起来看看 《破茧成蝶:用户体验设计师的成长之路》 这本书的介绍吧!