前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Graphviz

Graphviz

作者头像
润森
发布2019-10-30 14:49:12
1.5K0
发布2019-10-30 14:49:12
举报
文章被收录于专栏:毛利学Python

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

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

官方文档:http://www.graphviz.org

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

Graphviz

graphviz本身是一个绘图工具软件,下载地址在:http://www.graphviz.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脚本:

代码语言:javascript
复制
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。

无向图

就是将->变成 --

代码语言:javascript
复制
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

代码语言:javascript
复制
pip install pydotplus

demo

代码语言:javascript
复制
# 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()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小刘IT教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Graphviz
  • 如何布局
    • 有向图图
    • 无向图
    • py交互
    相关产品与服务
    命令行工具
    腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档