graphviz python_一个绘制决策树的工具——graphviz,但你忽视了它的其他功能

摘要: 数据可视化一直各行各业的一个重点,除了matplotlib之外,还可以使用graphviz软件绘制流程图,决策树等图形,并且还可以扩展到更多的图形,如结构句法树等,大脑风暴吧。

关键词: 数据可视化,graphviz

前言

数据可视化一直各行各业的一个重点。在机器学习中,常规的数据可视化使用matplotlib包就基本可以解决了,如果还不够的话可以使用seaborn进行补充。但是对于决策树算法以及一些集成算法来说matplotlib就显得力不从心了。人们就开始选择其他工具显示相关数据了,到目前为止我所知的就是Graphviz[1]了。

1 Graphviz简介

Graphviz是开源的图形可视化软件。它有几个主要的图形布局程序。它还具有Web和交互式图形界面,以及辅助工具,库和语言绑定。Graphviz布局程序以简单的文本语言描述图形,并以几种有用的格式制作图形,例如用于网页的图像和SVG,用于PDF或其他文档。或在交互式图形浏览器中显示。 (Graphviz还支持XML方言GXL。)Graphviz具有用于具体图表的许多有用功能,例如颜色,字体,表格节点布局,线型,超链接和自定义形状的选项。

2 安装与环境配置

1.软件下载与环境配置: https://www.graphviz.org/download/[2],该软件支持Linux、Mac、Windows系统,可根据自己的电脑选择安装。环境就是就bin目录配置环境变量(path里)即可。

2ba2abfc287e3a257830ccd8f59c298c.png

2.Python包安装 : 安装graphviz模块

pip install graphvize

3 决策树绘制

绘制一个决策树的案例如下:

from imageio import imreadimport matplotlib.pyplot as pltimport graphviz# 创建树对象mygraph = graphviz.Digraph(node_attr={'shape': 'box'},                            edge_attr={'labeldistance': "10.5"},                            format="png")# 构建节点mygraph.node("0", "Has feathers?")mygraph.node("1", "Can fly?")mygraph.node("2", "Has fins?")mygraph.node("3", "Hawk")mygraph.node("4", "Penguin")mygraph.node("5", "Dolphin")mygraph.node("6", "Bear")# 构建边mygraph.edge("0", "1", label="True")mygraph.edge("0", "2", label="False")mygraph.edge("1", "3", label="True")mygraph.edge("1", "4", label="False")mygraph.edge("2", "5", label="True")mygraph.edge("2", "6", label="False")# 渲染mygraph.render("decisionTree")# 图形显示ax = plt.gca()                # 获取图形坐标轴ax.imshow(imread("decisionTree.png"))  # 读取生成的图片ax.set_axis_off()             # 图形不嫌弃是坐标plt.show()                    # 显示图形

最后会生成一个decisionTree.png决策树图片如下:

111240891969799b40b3be7c319bfbd5.png

从上图可以看出图片不是很清晰,我们可以生成其他高清矢量图格式,如svg、pdf等。在创建树对象时,设置format=“pdf”,即可,主要代码如下:

mygraph = graphviz.Digraph(node_attr={'shape': 'box'},                            edge_attr={'labeldistance': "10.5"},                            format="pdf")

注: 这时就不要使用matplotlib打开图片了。
pdf高清文件图如下:

e9d68061f3620cf7a5089f12e271f34c.png

4 其他图形拓展

上面绘制了决策树,其实我们也可以拓展绘制结构句法树,这也是比较简单的,

from imageio import imreadimport matplotlib.pyplot as pltimport graphvizax = plt.gca()mygraph = graphviz.Graph(node_attr={'shape': 'none'},                            edge_attr={'labeldistance': "10.5"},                            format="pdf")mygraph.node("0", "S")   # 节点mygraph.node("1", "N")mygraph.edge("0", "1")   # 边mygraph.node("2", "小李", fontname="Microsoft YaHei")mygraph.edge("1", "2")mygraph.node("3", "VP")mygraph.node("4", "DP")mygraph.edge("0", "3")mygraph.edge("3", "4")mygraph.node("5", "D")mygraph.node("6", "U")mygraph.edge("4", "5")mygraph.edge("4", "6")mygraph.node("7", "远远", fontname="Microsoft YaHei")mygraph.node("8", "地", fontname="Microsoft YaHei")mygraph.edge("5", "7")mygraph.edge("6", "8")mygraph.node("9", "VP")mygraph.edge("3", "9")mygraph.node("10", "V")mygraph.node("11", "CS")mygraph.edge("9", "10")mygraph.edge("9", "11")mygraph.node("12", "看见", fontname="Microsoft YaHei")mygraph.edge("10", "12")mygraph.node("13", "N")mygraph.node("14", "VP")mygraph.edge("11", "13")mygraph.edge("11", "14")mygraph.node("15", "小王", fontname="Microsoft YaHei")mygraph.edge("13", "15")mygraph.node("16", "PP")mygraph.node("17", "V")mygraph.edge("14", "16")mygraph.edge("14", "17")mygraph.node("18", "看书", fontname="Microsoft YaHei")mygraph.edge("17", "18")mygraph.node("19", "P")mygraph.node("20", "NP")mygraph.edge("16", "19")mygraph.edge("16", "20")mygraph.node("21", "在", fontname="Microsoft YaHei")mygraph.edge("19", "21")mygraph.node("22", "N")mygraph.node("23", "F")mygraph.edge("20", "22")mygraph.edge("20", "23")mygraph.node("24", "草地", fontname="Microsoft YaHei")mygraph.node("25", "上", fontname="Microsoft YaHei")mygraph.edge("22", "24")mygraph.edge("23", "25")mygraph.render("tmp")

绘制结果如下:

b93a0140357dc4e4304c1327fb697d69.png

总体来说还是可以接受的。当然这个是一个点一个点连的,在实际中则需要利用树这种数据结构的相关算法进行处理,快速绘制出相关图形。
当然还可以绘制其他图形,例如:

9578f7f371818accaf5712c7e38db26b.png
28cfd5d853c0c049e22355f053d3e894.png

这里就不作演示,可以参考官方文档[3]!

总结

Graphviz是开源的图形可视化软件,不仅仅可以绘制决策树,还可以更多的无向图和有向图,Graphviz提供了很多图形供我们组合以及不同的线条,颜色等,可以充分发挥我们的想象去思考如何构建我们图形,例如自动机转换图等。除此之外,Graphviz提供的接口比较多,能够导出的结果也是多种多样,能够满足我们常用的需求。

Reference

[1] Graphviz:http://www.graphviz.org/about/

[2] https://www.graphviz.org/download/:https://www.graphviz.org/download/

[3] 官方文档:http://www.graphviz.org/documentation/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值