Hi matplotlib community,
Hope everyone is well.
I would like to announce iplotx, a package to plot networks/graphs and trees from any Python library:
Preprint: Unified network visualisation in Python
Repo: GitHub - fabilab/iplotx: Visualise networks and trees in Python, with style.
Docs: iplotx documentation — iplotx 0.6.1 documentation
It is compatible with all other matplotlib artists and accepts data from networkx, igraph, Biopython, scikit-bio, cogent3, ETE4, etc. Any additional network analysis library can be made compatible with iplotx without intervention by myself via an entry point mechanism: iplotx will scan your python installation for them and autodetect the library. The idea is no matter what network you throw at it, iplotx will plot it consistently.
It supports more features than any other Python network visualisation package I have seen including three ways to style any element, partial styling, loops, multigraphs, vertex labels, edge labels, animations, post-render edits, proper DPI scaling, edge padding, waypoints, and offsets, curved edges with/without arrowheads, a dozen vertex shapes, 20 or so arrow shapes, graph clusterings and covers, tree cascading patches, tree split edges, partially angular trees, leaf labels and edges, tree layouts and and orientation, and more.
The package includes about 50 gallery examples, about 200 test functions covering 95% of the codebase, ruff code formatting, continuous integration, and can plot networks with hundreds of thousands of edges on a laptop in seconds. In practice, you are likely limited by your eyes crossing or your brain melting rather than by iplotx not managing your network.
Thomas Caswell here at mpl was one of the folks that initially inspired me back in 2021 and I would like to thank him especially. Other supporters include the core devs at igraph, networkx, Biopython, and cogent3. Many people seem to really like it and find it useful and easy to learn.
Hope you all enjoy your network plots with iplotx and open an issue or GitHub if you find a bug or would like to request a feature!