Skip to main content

Pydot _flow_ makes it a little easier to assemble simple flowing graphs using Pydot.

Project description

Pydot flow

PyPI version Python versions License: MIT

A flowing application programming interface for creating Graphviz visualizations using Pydot.

Introduction

Pydot flow makes it a little easier to assemble flowcharts using Pydot. Each line of code maps to one Node in the graph. Each call to the flow method returns the new Node that you flowed to.

You can, for example, use flow to construct a graph programmatically at each step of a data transformation pipeline - visually documenting a data transformation.

Installation

pip install pydot-flow

Example

In this hypothetical copy-and-paste example a graph is constructed using the flow API.

Implementation

# 0. Import dependencies.
import random
import pydot
from pydot_flow import Chart
from IPython.display import Image


# 1. Define a function for creating a random color code.
def random_color():
    "Generate a random color."
    return "#" + hex(random.randint(0, 0xFFFFFF))[2:].rjust(6, "0")


# 2. Create a Pydot flow Chart.
chart = Chart(
    rankdir="TB",
    splines="false",
    label="Chart",
    labelloc="t",
    fontname="Sans",
    pad=0.2,
    ratio=0.5,
    graph_type="graph",
)

# 3. Set Node defaults.
chart.get_graph().set_node_defaults(style="filled")

# 4. Create the first Node and name it Node 1.
node_1 = chart.create_node(
    src_node_attrs={
        "label": "Node 1",
        "shape": "diamond",
        "color": random_color(),
    }
)

# 5. Flow from Node 1 to Node 2a.
node_2a = node_1.flow(
    src_port="s",
    dst_node_attrs={
        "label": "Node 2a",
        "shape": "oval",
        "color": random_color(),
    },
    edge_attrs={"label": "Edge 1-2a"},
)


# 6. Flow from Node 2a to 3a.
node_3a = node_2a.flow(
    src_port="s",
    dst_node_attrs={
        "name": "Pink Elephants",  # You can optionally name your own Node.
        "label": "Node 3a",
        "shape": "square",
        "color": random_color(),
    },
    edge_attrs={"label": "Edge 2a-3a"},
)

# 7. Return to Node 1 and flow to Node 2b.
node_2b = node_1.flow(
    src_port="s",
    dst_node_attrs={
        "label": "Node 2b",
        "shape": "rectangle",
        "color": random_color(),
    },
    edge_attrs={"label": "Edge 1-2b"},
)

# 8. Flow from Node 2b to Node 2c.
node_2c = node_2b.flow(
    src_port="e",
    dst_node_attrs={
        "label": "Node 2c",
        "shape": "circle",
        "color": random_color(),
    },
    edge_attrs={"label": "Edge 2b-2c"},
    graph=pydot.Subgraph(rank="same"),
)

# 9. Return to Node 2b and flow to Node 3b.
node_3b = node_2b.flow(
    src_port="s",
    dst_node_attrs={
        "label": "Node 3b",
        "shape": "triangle",
        "color": random_color(),
    },
    edge_attrs={"label": "Edge 2b-3b"},
)

# 10. Flow from Node 3b to Node 2c - reference Node 2c by name.
node_3b.flow(
    src_port="e",
    dst_node_attrs={"name": node_2c.get_name()},
    edge_attrs={"label": "Edge 3b-2c"},
).flow( # You can use method chaining.
    src_port="s",
    dst_node_attrs={"name": "Pink Elephants"},
    edge_attrs={"label": "Edge 2c-3a"},
)

# 11. Save the graph image to a file.
chart.get_graph().write_png("output-no-splines.png")

# 12. Output an image in a Jupyter Notebook.
Image(chart.get_graph().create_png(prog="dot"))

Output

No Splines

Setting the splines parameter to true in the Chart constructor will yield a chart with splines.

Splines

Support

If you have a feature request or run into any issues, feel free to submit an issue or start a discussion. You’re also welcome to reach out directly to one of the authors.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pydot_flow-0.6.0.tar.gz (127.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pydot_flow-0.6.0-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

File details

Details for the file pydot_flow-0.6.0.tar.gz.

File metadata

  • Download URL: pydot_flow-0.6.0.tar.gz
  • Upload date:
  • Size: 127.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.28.1

File hashes

Hashes for pydot_flow-0.6.0.tar.gz
Algorithm Hash digest
SHA256 7d1c7ed2d15ffe224ed6f3d891588e5429b5a77eae1d7b1e619fab7913df4232
MD5 285759b5025740b21be2878490de41a0
BLAKE2b-256 d7385537940d7acf35d76fec228baf8b1d2f175c077aa8ea34ed70f9f85115f9

See more details on using hashes here.

File details

Details for the file pydot_flow-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: pydot_flow-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 5.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.28.1

File hashes

Hashes for pydot_flow-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 96b72466cea427b71628f617d6e23700ac6b12424fc0897902b7354516f5a460
MD5 58f4ce03f9f2c367483fb0189826cc3a
BLAKE2b-256 133911dfc300fec9786f50f092f7631cb776a6125fba5300a05b543f5da0f99c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page