跳转到主要内容

Graphviz的Dot的Python接口

项目描述

CI Coverage PyPI Code style: ruff

Pydot

pydot 是一个用于 Graphviz 及其 DOT 语言的 Python 接口。您可以使用 pydot 创建、读取、编辑和可视化图。

  • 它是用纯 Python 编写的,除了 Graphviz 本身外,只有一个依赖项 – pyparsing。
  • 它与 networkx 兼容,可以将其图转换为 pydot

要了解 Graphviz 能做什么,请查看 Graphviz 画廊

依赖项

  • pyparsing:仅用于 加载 DOT 文件,在 pydot 安装过程中自动安装。
  • GraphViz:用于以多种格式(包括 PNG、SVG、PDF 等)渲染图。应单独安装,使用您的系统 包管理器、类似工具(例如,MacPorts)或从 其源代码 安装。

安装

  • 最新版本,来自 PyPI

    pip install pydot
    
  • 当前开发代码,来自此存储库

    pip install git+https://github.com/pydot/pydot.git
    
  • 开发安装,以修改代码或贡献更改

    # Clone the repository
    git clone https://github.com/pydot/pydot
    cd pydot
    
    # (Optional: create a virtual environment)
    python3 -m venv _venv
    . ./_venv/bin/activate
    
    # Make an editable install of pydot from the source tree
    pip install -e .
    

快速入门

1. 输入

无论您想用 pydot 做什么,您都需要一些输入来开始。以下是获取数据的一些常见方法。

从现有的 DOT 文件导入图

假设您已经有一个文件 example.dot(基于 Wikipedia 的示例

graph my_graph {
    bgcolor="yellow";
    a [label="Foo"];
    b [shape=circle];
    a -- b -- c [color=blue];
}

您可以使用这种方式从文件中读取图

import pydot

graphs = pydot.graph_from_dot_file("example.dot")
graph = graphs[0]

从现有的 DOT 字符串解析图

如果您已经有一个描述 DOT 图的字符串,请使用此方法。

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)

2. 编辑

您现在可以使用 pydot 方法进一步操作您的图。

添加更多节点和边

graph.add_edge(pydot.Edge("b", "d", style="dotted"))

编辑图、节点和边的属性

graph.set_bgcolor("lightyellow")
graph.get_node("b")[0].set_shape("box")

3. 输出

这里有三种不同的输出选项

生成图像

如果您只想将图像保存到文件,请使用其中一个 write_* 方法。

graph.write_png("output.png")

如果您需要进一步处理图像输出,则 create_* 方法将为您提供 Python bytes 对象。

output_graphviz_svg = graph.create_svg()

检索 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)

欢迎更多 文档贡献

故障排除

启用日志记录

pydot 使用 Python 的标准 logging 模块。要查看日志,假设尚未配置日志记录

>>> import logging
>>> logging.basicConfig(level=logging.DEBUG)
>>> import pydot
DEBUG:pydot:pydot initializing
DEBUG:pydot:pydot <version>
DEBUG:pydot.core:pydot core module initializing
DEBUG:pydot.dot_parser:pydot dot_parser module initializing

警告:当启用 DEBUG 级别日志记录时,pydot 可能会记录它处理的数据,例如图形内容或 DOT 字符串。这可能导致日志变得非常大或包含敏感信息。

高级日志配置

  • 查看 Python 日志记录文档logging_tree 可视化工具。
  • pydot 不会向其日志记录器添加任何处理器,也不会设置或修改您的根日志记录器。pydot 日志记录器使用默认级别 NOTSET 创建。
  • pydot 注册以下日志记录器
    • pydot:父日志记录器。在启动期间发出少量消息。
    • pydot.core:与 pydot 对象、Graphviz 执行和其他任何其他未由其他日志记录器涵盖的内容相关的消息。
    • pydot.dot_parser:与 DOT 字符串解析相关的消息。

许可证

遵照 MIT 许可证 发布。

模块 pydot._vendor.tempfile 基于 Python 3.12 标准库模块 tempfile.py,版权所有 © 2001-2023 Python 软件基金会。保留所有权利。根据 Python-2.0 许可证授权。

联系方式

当前维护者

  • Łukasz Łapiński <lukaszlapinski7 (at) gmail (dot) com>

前任维护者

  • Sebastian Kalinowski <sebastian (at) kalinowski (dot) eu> (GitHub: @prmtl)
  • Peter Nowee <peter (at) peternowee (dot) com> (GitHub: @peternowee)

原作者:Ero Carrera <ero (dot) carrera (at) gmail (dot) com>

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定要选择哪个,请了解更多关于 安装软件包 的信息。

源代码分布

pydot-3.0.2.tar.gz (168.0 kB 查看哈希值)

上传时间 源代码

构建分布

pydot-3.0.2-py3-none-any.whl (35.8 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误记录StatusPageStatusPage状态页