好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Graphviz

学习一时爽,一直学习一直爽

??Hello,大家好,我是 もうり,一个从无到有的技术+语言小白。

官方文档:http://HdhCmsTestgraphviz.org

graphviz是贝尔实验室开发的一个开源的工具包,它使用一个特定的DSL(领域特定语言):dot作为脚本语言,然后使用布局引擎来解析此脚本,并完成自动布局。

Graphviz

graphviz本身是一个绘图工具软件,下载地址在:http://HdhCmsTestgraphviz.org/。如果你是 Linux ,可以用apt-get或者yum的方法安装。如果是windows,就在官网下载msi文件安装。无论是 Linux 还是windows,装完后都要设置环境变量,将graphviz的bin目录加到PATH,比如我是windows,加入了PATH

在这里插入图片描述

如何布局

graphviz中包含了众多的布局器:

dot 默认布局方式,主要用于有向图

neato 基于spring-model(又称force-based)算法

twopi 径向布局

circo 圆环布局

graph用于无向图

会个dot和graph就能装逼了

要用graphviz画图,首先要明确的就是所画之图为有向图还是无向图。

Digraph表示有向图,graph表示无向图。

一般来说,主要是有向图,无向图也可通过设置边的属性来画出无向边。

须注意的是,-> 表示有向图中的边,-- 表示无向图中的边,不能混用。

有向图图

比如,要绘制一个有向图,包含4个节点a,b,c,d。

其中a指向b,b和c指向d。可以定义下列脚本:

建立一个demo.dot脚本:

 digraph?demo{ a->b; b->d; c->d; }  

在这里插入图片描述

然后保存下

在这里插入图片描述

那么这个demo.png就生成了

在这里插入图片描述

打开Graphviz好麻烦,没错还可以直接用cmd

打开cmd到first.dot目录下,运行: dot -Tpng demo.dot -o demo.png 可以得到画好的图形。

解释:dot表示使用的是dot布局,其他布局相应的修改即可,-T表示格式,即画成png格式,-o表示重命名为first.png。

无向图

就是将 -> 变成? --

 graph?demo1?{ ????a?--?b ????b?--?c ????c?--?a }  

在这里插入图片描述

恭喜你入门了,我也就会个dot

http://icodeit.org/2012/01/%E4%BD%BF%E7%94%A8graphviz%E7%BB%98%E5%88%B6%E6%B5%81%E7%A8%8B%E5%9B%BE/

后面就是学下换样式换图形

在这里插入图片描述

我得说下hash表就是通过这玩意画的

在这里插入图片描述

在这里插入图片描述

py交互

主要是将一个决策树可视化

sklearn自带的 export_graphviz

使用的包是 pydotplus

 pip?install?pydotplus  

demo

 #?author:?毛利 from?sklearn.model_selection?import?train_test_split import?pandas?as?pd from?sklearn.tree?import?DecisionTreeClassifier from?sklearn?import?datasets from??sklearn?import?tree from?sklearn.metrics?import?accuracy_score import?pydotplus iris?=?datasets.load_iris() iris_feature?=?'花萼长度',?'花萼宽度',?'花瓣长度',?'花瓣宽度' iris_feature_E?=?'sepal?length',?'sepal?width',?'petal?length',?'petal?width' iris_class?=?'Iris-setosa',?'Iris-versicolor',?'Iris-virginica' x?=?pd.DataFrame(iris['data'])[[0,1]] y?=?iris.target x_train,x_test,y_train,y_test?=?train_test_split(x,y) model?=?DecisionTreeClassifier() model.fit(x_train,y_train) y_train_pred?=?model.predict(x_train) print('训练集正确率:',?accuracy_score(y_train,?y_train_pred))  #?保存 #?dot?-Tpng?my.dot?-o?my.png #?1、输出 with?open('iris.dot',?'w')?as?f: ????tree.export_graphviz(model,?out_file=f,?feature_names=iris_feature_E[0:2],?class_names=iris_class, ?????????????????????????filled=True,?rounded=True,?special_characters=True) tree.export_graphviz(model,?out_file='iris.dot',?feature_names=iris_feature_E[0:2],?class_names=iris_class, ?????????????????????filled=True,?rounded=True,?special_characters=True) #?2、给定文件名 tree.export_graphviz(model,?out_file='iris.dot') #?tree.export_graphviz(model,?out_file='iris.dot') #?3、输出为pdf格式 dot_data?=?tree.export_graphviz(model,?out_file=None,?feature_names=iris_feature_E[0:2],?class_names=iris_class, ????????????????????????????????filled=True,?rounded=True,?special_characters=True)  graph?=?pydotplus.graph_from_dot_data(dot_data) graph.write_pdf('iris.pdf') f?=?open('iris.png',?'wb') f.write(graph.create_png()) f.close()  

查看更多关于Graphviz的详细内容...

  阅读:34次