Graphviz 的 Dot 的 Python 接口
项目描述
关于
pydot
:
- 是Graphviz的接口
- 可以解析并转储为GraphViz 使用的DOT 语言,
- 是用纯 Python 编写的,
并且networkx
可以将其图形转换为pydot
.
开发在GitHub进行,您可以在其中报告问题并贡献代码。
例子
这里的示例将向您展示最常见的输入、编辑和输出方法。
输入
无论您想做什么pydot
,都需要一些输入才能开始。以下是 3 个常见选项:
-
从现有的 DOT 文件导入图形。
如果您已经有一个描述图形的 DOT 文件,例如作为另一个程序的输出,请使用此方法。假设您已经有了这个
example.dot
(基于Wikipedia 的示例):graph my_graph { bgcolor="yellow"; a [label="Foo"]; b [shape=circle]; a -- b -- c [color=blue]; }
只需从 DOT 文件中读取图表:
import pydot graphs = pydot.graph_from_dot_file('example.dot') graph = graphs[0]
-
或:从现有的 DOT 字符串解析图形。
如果您已经有一个 DOT 字符串描述 Python 变量中的图形,请使用此方法:
import pydot dot_string = """graph my_graph { bgcolor="yellow"; a [label="Foo"]; b [shape=circle]; a -- b -- c [color=blue]; }""" graphs = pydot.graph_from_dot_data(dot_string) graph = graphs[0]
-
或者:使用 pydot 对象从头开始创建图形。
现在这是很酷的东西开始的地方。如果您想从 Python 构建新图形,请使用此方法。
import pydot graph = pydot.Dot('my_graph', graph_type='graph', bgcolor='yellow') # Add nodes my_node = pydot.Node('a', label='Foo') graph.add_node(my_node) # Or, without using an intermediate variable: graph.add_node(pydot.Node('b', shape='circle')) # Add edges my_edge = pydot.Edge('a', 'b', color='blue') graph.add_edge(my_edge) # Or, without using an intermediate variable: graph.add_edge(pydot.Edge('b', 'c', color='blue'))
想象一下,使用 Python 程序中的这些基本构建块来动态生成图形。例如,从一个基本的
pydot.Dot
图形对象开始,然后在添加节点和边的同时遍历数据。使用数据中的值作为标签,以确定形状、边缘等。这样,您可以轻松构建数千个相互关联的项目的可视化。 -
或:将 NetworkX 图转换为 pydot 图。
NetworkX 有 pydot 图的转换方法:
import networkx import pydot # See NetworkX documentation on how to build a NetworkX graph. graph = networkx.drawing.nx_pydot.to_pydot(my_networkx_graph)
编辑
您现在可以使用 pydot 方法进一步操作您的图表:
-
添加更多节点和边:
graph.add_edge(pydot.Edge('b', 'd', style='dotted'))
-
编辑图形、节点和边的属性:
graph.set_bgcolor('lightyellow') graph.get_node('b')[0].set_shape('box')
输出
以下是 3 种不同的输出选项:
-
生成图像。
要生成图形的图像,请使用
create_*()
或write_*()
方法之一。-
如果您需要在 Python 中进一步处理输出,这些
create_*
方法将为您提供 Python 字节对象:output_graphviz_svg = graph.create_svg()
-
如果您只想将图像保存到文件中,请使用以下
write_*
方法之一:graph.write_png('output.png')
-
-
检索 DOT 字符串。
您可以检索两种不同的 DOT 字符串:
-
“原始” pydot DOT:生成速度最快,通常看起来仍与您输入的 DOT 非常相似。它由 pydot 本身生成,无需调用 Graphviz。
# As a string: output_raw_dot = graph.to_string() # Or, save it as a DOT-file: graph.write_raw('output_raw.dot')
-
Graphviz DOT:您可以使用它来检查 Graphviz 在生成图像之前如何布置图形。它由 Graphviz 生成。
# As a bytes literal: output_graphviz_dot = graph.create_dot() # Or, save it as a DOT-file: graph.write_dot('output_graphviz.dot')
-
-
转换为 NetworkX 图。
在这里,NetworkX 也有一个 pydot 图的转换方法:
my_networkx_graph = networkx.drawing.nx_pydot.from_pydot(graph)
更多帮助
如需更多帮助,请参阅各种 pydot 对象和方法的文档字符串。例如help(pydot)
,help(pydot.Graph)
和
help(pydot.Dot.write)
。
欢迎更多文档贡献。
安装
pip install pydot
从来源:
python setup.py install
依赖项
-
pyparsing
: 仅用于加载DOT 文件,在安装过程中自动pydot
安装。 -
GraphViz:用于将图形呈现为 PDF、PNG、SVG 等。应使用系统的包管理器、类似的东西(例如MacPorts)或从其源单独安装 。
执照
根据MIT 许可分发。
联系人
维护者:
- Sebastian Kalinowski sebastian@kalinowski.eu (GitHub: @prmtl)
- Peter Nowee peter@peternowee.com (GitHub: @peternowee)
原作者:埃罗·卡雷拉ero.carrera@gmail.com
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。