学习一时爽,一直学习一直爽
??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()