R语言绘制流程图(二)

栏目: R语言 · 发布时间: 6年前

作者简介

作者:吴健 中国科学院大学 R语言、统计学爱好者,尤其擅长R语言和Arcgis在生态领域的应用分享

个人公众号:统计与编程语言

前文推送:

R语言绘制流程图(一)

上一期我们已经对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"))

R语言绘制流程图(二)

R语言绘制流程图(二)

大家都在看

2017年R语言发展报告(国内)

精心整理 | R语言中文社区历史文章合集(作者篇)

精心整理 | R语言中文社区历史文章整理(类型篇)

公众号后台回复关键字即可学习

回复 爬虫 爬虫三大案例实战  

Python

1小时破冰入门

回复 数据挖掘  R语言入门及数据挖掘

回复  人工智能 三个月入门人工智能

回复  数据分析师 数据分析师成长之路 

回复 机器学习 机器学习的商业应用

回复  数据科学 数据科学实战

常用算法

常用数据挖掘算法

R语言绘制流程图(二)

本文由R语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。

转载、引用前需联系作者,并署名作者且注明文章出处。

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。


以上所述就是小编给大家介绍的《R语言绘制流程图(二)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PHP Cookbook

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 编码/解码

Base64 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具