Graph Pythonically. ππποΈπ
DSPlot is a tool to simply visualize tree and graph data structures by serving as a Pythonic interface to the Graphviz layout. DSPlot allows you to easily draw trees, graphs (both directed and undirected), and matrices by passing data in primitive form and directly output an image.
- Python 3.9 or later
pip
virtualenv
- MacOS:
brew install graphviz
- Linux:
apt-get install graphviz libgraphviz-dev
- Other OS(s): https://graphviz.org/download/
$ pip install dsplot
- Binary Tree:
from dsplot.tree import BinaryTree
tree = BinaryTree(nodes=[5, 4, 8, 11, None, 13, 4, 7, 2, None, None, 5, 1])
tree.plot()
- Graph:
from dsplot.graph import Graph
graph = Graph(
{0: [1, 4, 5], 1: [3, 4], 2: [1], 3: [2, 4], 4: [], 5: []}, directed=True
)
graph.plot()
from dsplot.graph import Graph
graph = Graph(
{1: [2, 4], 2: [1, 3], 3: [2, 4, 5], 4: [1, 3], 5: [3, 6, 7], 6: [5], 7: [5]}, directed=False
)
graph.plot()
- Matrix:
from dsplot.matrix import Matrix
matrix = Matrix([[1, 2, 3], [4, 5, 6], [1, 2, 6]])
matrix.plot()
- Customization:
You can customize the border color, shape, style, and fill color of the nodes, and the orientation (left to right - LR, top to bottom - TB) of the graph.
from dsplot.graph import Graph
graph = Graph(
{0: [1, 4, 5], 1: [3, 4], 2: [1], 3: [2, 4], 4: [], 5: []}, directed=True
)
graph.plot(fill_color='#aec6cf')
from dsplot.tree import BinaryTree
tree = BinaryTree(nodes=[5, 4, 8, 11, None, 13, 4, 7, 2, None, None, 5, 1])
tree.plot(orientation='LR', border_color='#FFCE30', fill_color='#aec6cf')
- Edge values for Graphs:
For edge values,str
andint
data types are supported at the moment.
from dsplot.graph import Graph
graph = Graph(
{0: [1, 4, 5], 1: [3, 4], 2: [1], 3: [2, 4], 4: [], 5: []},
directed=True,
edges={'01': 1, '04': 4, '05': 5, '13': 3, '14': 4, '21': 2, '32': 3, '34': 4},
)
graph.plot()
from dsplot.tree import BinaryTree
tree = BinaryTree(nodes=[5, 4, 8, 11, None, 13, 4, 7, 2, None, None, 5, 1])
print(tree.preorder())
# [5, 4, 11, 7, 2, 8, 13, 4, 5, 1]
print(tree.inorder())
# [7, 11, 2, 4, 5, 13, 8, 5, 4, 1]
print(tree.postorder())
# [7, 2, 11, 4, 13, 5, 1, 4, 8, 5]
from dsplot.graph import Graph
graph = Graph(
{0: [1, 4, 5], 1: [3, 4], 2: [1], 3: [2, 4], 4: [], 5: []}, directed=True
)
print(graph.bfs())
# [0, 1, 4, 5, 3, 2]
print(graph.dfs())
# [0, 1, 3, 2, 4, 5]
Contributions, issues and feature requests are welcome!
DSPlot
usespoetry
for dependency management. For guidance on how to installpoetry
, please refer to the official documentation.- After cloning the repo, run
poetry install
to install the dependencies.
DSPlot
usespytest
for testing. To run the tests, runpoetry run pytest
in the root directory.