iplotx 0.5.0__tar.gz → 0.5.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {iplotx-0.5.0 → iplotx-0.5.1}/PKG-INFO +32 -15
- iplotx-0.5.1/README.md +69 -0
- iplotx-0.5.1/docs/source/_static/banner.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/tree/plot_cladeedges.py +2 -2
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/tree/plot_tree_style_clades.py +2 -2
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/edge/geometry.py +0 -2
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/version.py +1 -1
- iplotx-0.5.1/scripts/make_banner.py +82 -0
- iplotx-0.5.0/README.md +0 -52
- {iplotx-0.5.0 → iplotx-0.5.1}/.github/workflows/publish.yml +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/.github/workflows/test.yml +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/.gitignore +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/.pre-commit-config.yaml +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/.readthedocs.yaml +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/LICENSE +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/MANIFEST.in +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/assets/pylint.svg +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/docs/Makefile +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/docs/make.bat +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/docs/source/_static/graph_basic.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/docs/source/_templates/layout.html +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/docs/source/api/artists.md +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/docs/source/api/complete_style_specification.md +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/docs/source/api/plotting.md +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/docs/source/api/providers.md +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/docs/source/api/style.md +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/docs/source/api.md +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/docs/source/conf.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/docs/source/images/sphx_glr_plot_basic_001.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/docs/source/images/thumb/sphx_glr_plot_basic_thumb.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/docs/source/index.md +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/docs/source/providers.md +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/docs/source/sg_execution_times.rst +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/docs/source/style.md +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/GALLERY_HEADER.rst +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/data/chess_masters_WCC.pgn.bz2 +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/data/knuth_miles.txt.gz +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_animation.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_arrows.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_basic.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_big_curves.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_chess_masters.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_cliques.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_cluster_layout.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_company_structure.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_complex.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_dag.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_directed.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_edit_artists.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_four_grids.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_grouping.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_halfarrows.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_house.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_knuth_miles.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_labels_and_colors.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_loops.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_max_bipartite_matching.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_minimum_spanning_trees.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_mouse_hover.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_multipartite_layout.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_multistyle.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_parallel_igraph_networkx.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_ports.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_shortest_path.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_simple_networkx.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_simple_path.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_simplenetworkdataprovider.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_style.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_tension.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_traveling_salesman.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_vertexmarkers.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_voronoi.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/plot_with_colorbar.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/tree/GALLERY_HEADER.rst +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/tree/data/tree-with-support.json +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/tree/plot_angular_waypoints.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/tree/plot_biopython_tree.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/tree/plot_cogent3_layouts.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/tree/plot_cogent3_tree.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/tree/plot_ete4.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/tree/plot_leafedges.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/tree/plot_leafedges_and_cascades.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/tree/plot_simpletreedataprovider.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/tree/plot_skbio_tree.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/tree/plot_split_edges.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/tree/plot_support.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/tree/plot_tree_node_background.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/gallery/tree/plot_trees_of_trees.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/__init__.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/artists.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/cascades.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/edge/__init__.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/edge/arrow.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/edge/leaf.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/edge/ports.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/groups.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/ingest/__init__.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/ingest/heuristics.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/ingest/providers/network/igraph.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/ingest/providers/network/networkx.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/ingest/providers/network/simple.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/ingest/providers/tree/biopython.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/ingest/providers/tree/cogent3.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/ingest/providers/tree/ete4.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/ingest/providers/tree/simple.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/ingest/providers/tree/skbio.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/ingest/typing.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/label.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/layout.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/network.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/plotting.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/style/__init__.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/style/leaf_info.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/style/library.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/tree.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/typing.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/utils/geometry.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/utils/internal.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/utils/matplotlib.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/utils/style.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/iplotx/vertex.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/pyproject.toml +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/scripts/copy_github_release_into_version.sh +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/scripts/update_pylint_badge.sh +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_biopython/cascades.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_biopython/leaf_labels.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_biopython/leaf_labels_hmargin.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_biopython/leafedges.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_biopython/show_support.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_biopython/tree_basic.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_biopython/tree_radial.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_cogent3/leaf_labels.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_cogent3/leaf_labels_hmargin.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_cogent3/tree_basic.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_cogent3/tree_radial.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_ete4/leaf_labels.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_ete4/leaf_labels_hmargin.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_ete4/split_edges.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_ete4/tree_basic.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_ete4/tree_radial.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_igraph/clustering_directed.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_igraph/clustering_directed_large.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_igraph/graph_basic.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_igraph/graph_directed.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_igraph/graph_directed_curved_loops.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_igraph/graph_edit_children.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_igraph/graph_labels.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_igraph/graph_layout_attribute.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_igraph/graph_null.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_igraph/graph_squares_directed.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_igraph/graph_with_curved_edges.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_igraph/igraph_layout_object.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_igraph/multigraph_with_curved_edges_undirected.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_networkx/cluster-layout.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_networkx/complex.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_networkx/complex_rotatelabels.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_networkx/directed_graph.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_networkx/directed_graph_with_colorbar.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_networkx/empty_graph.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_networkx/flat_style.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_networkx/house_with_colors.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_networkx/labels_and_colors.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_networkx/shortest_path.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_networkx/simple_graph.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_simple_network_provider/graph_basic.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_simple_network_provider/graph_directed.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_simple_network_provider/graph_labels.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_skbio/leaf_labels.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_skbio/leaf_labels_hmargin.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_skbio/tree_basic.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_skbio/tree_radial.png +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_arrows.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_biopython.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_cascades.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_cogent3.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_edge.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_edge_geometry.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_ete4.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_geometry.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_heuristics.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_igraph.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_matplotlib_utils.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_network_hotload.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_networkx.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_ports.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_simple_network_provider.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_simple_tree_provider.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_skbio.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_style.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/test_vertex.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/tests/utils.py +0 -0
- {iplotx-0.5.0 → iplotx-0.5.1}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: iplotx
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.1
|
|
4
4
|
Summary: Plot networkx from igraph and networkx.
|
|
5
5
|
Project-URL: Homepage, https://github.com/fabilab/iplotx
|
|
6
6
|
Project-URL: Documentation, https://readthedocs.org/iplotx
|
|
@@ -43,9 +43,25 @@ Description-Content-Type: text/markdown
|
|
|
43
43
|

|
|
44
44
|
|
|
45
45
|
# iplotx
|
|
46
|
-
|
|
46
|
+
[](https://iplotx.readthedocs.io/en/latest/gallery/index.html).
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
Visualise networks and trees in Python, with style.
|
|
49
|
+
|
|
50
|
+
Supports:
|
|
51
|
+
- **networks**:
|
|
52
|
+
- [networkx](https://networkx.org/)
|
|
53
|
+
- [igraph](igraph.readthedocs.io/)
|
|
54
|
+
- [minimal network data structure](https://iplotx.readthedocs.io/en/latest/gallery/plot_simplenetworkdataprovider.html#sphx-glr-gallery-plot-simplenetworkdataprovider-py) (for educational purposes)
|
|
55
|
+
- **trees**:
|
|
56
|
+
- [ETE4](https://etetoolkit.github.io/ete/)
|
|
57
|
+
- [cogent3](https://cogent3.org/)
|
|
58
|
+
- [Biopython](https://biopython.org/)
|
|
59
|
+
- [scikit-bio](https://scikit.bio)
|
|
60
|
+
- [minimal tree data structure](https://iplotx.readthedocs.io/en/latest/gallery/tree/plot_simpletreedataprovider.html#sphx-glr-gallery-tree-plot-simpletreedataprovider-py) (for educational purposes)
|
|
61
|
+
|
|
62
|
+
In addition to the above, *any* network or tree analysis library can register an [entry point](https://iplotx.readthedocs.io/en/latest/providers.html#creating-a-custom-data-provider) to gain compatibility with `iplotx` with no intervention from our side.
|
|
63
|
+
|
|
64
|
+
**NOTE**: This is currently late beta quality software. The API and functionality might break rarely.
|
|
49
65
|
|
|
50
66
|
## Installation
|
|
51
67
|
```bash
|
|
@@ -72,19 +88,20 @@ See [readthedocs](https://iplotx.readthedocs.io/en/latest/) for the full documen
|
|
|
72
88
|
## Gallery
|
|
73
89
|
See [gallery](https://iplotx.readthedocs.io/en/latest/gallery/index.html).
|
|
74
90
|
|
|
75
|
-
##
|
|
76
|
-
- Plot networks from
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
91
|
+
## Features
|
|
92
|
+
- Plot networks from multiple libraries including networkx and igraph, using matplotlib as a backend. ✅
|
|
93
|
+
- Plot trees from multiple libraries such as cogent3, ETE4, skbio, and biopython. ✅
|
|
94
|
+
- Flexible yet easy styling, including an internal library of styles ✅
|
|
95
|
+
- Interactive plotting, e.g. zooming and panning after the plot is created. ✅
|
|
96
|
+
- Store the plot to disk thanks to the many matplotlib backends (SVG, PNG, PDF, etc.). ✅
|
|
80
97
|
- Efficient plotting of large graphs using matplotlib's collection functionality. ✅
|
|
81
|
-
-
|
|
82
|
-
-
|
|
83
|
-
-
|
|
84
|
-
-
|
|
85
|
-
-
|
|
86
|
-
|
|
87
|
-
|
|
98
|
+
- Edit plotting elements after the plot is created, e.g. changing node colors, labels, etc. ✅
|
|
99
|
+
- Animations, e.g. showing the evolution of a network over time. ✅
|
|
100
|
+
- Mouse and keyboard interaction, e.g. hovering over nodes/edges to get information about them. ✅
|
|
101
|
+
- Node clustering and covers, e.g. showing communities in a network. ✅
|
|
102
|
+
- Choice of tree layouts and orientations. ✅
|
|
103
|
+
- Tree-specific options: cascades, subtree styling, split edges, etc. ✅
|
|
104
|
+
- (WIP) Support uni- and bi-directional communication between graph object and plot object.🏗️
|
|
88
105
|
|
|
89
106
|
## Authors
|
|
90
107
|
Fabio Zanini (https://fabilab.org)
|
iplotx-0.5.1/README.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+

|
|
2
|
+

|
|
3
|
+

|
|
4
|
+
[](https://coveralls.io/github/fabilab/iplotx?branch=main)
|
|
5
|
+

|
|
6
|
+
|
|
7
|
+
# iplotx
|
|
8
|
+
[](https://iplotx.readthedocs.io/en/latest/gallery/index.html).
|
|
9
|
+
|
|
10
|
+
Visualise networks and trees in Python, with style.
|
|
11
|
+
|
|
12
|
+
Supports:
|
|
13
|
+
- **networks**:
|
|
14
|
+
- [networkx](https://networkx.org/)
|
|
15
|
+
- [igraph](igraph.readthedocs.io/)
|
|
16
|
+
- [minimal network data structure](https://iplotx.readthedocs.io/en/latest/gallery/plot_simplenetworkdataprovider.html#sphx-glr-gallery-plot-simplenetworkdataprovider-py) (for educational purposes)
|
|
17
|
+
- **trees**:
|
|
18
|
+
- [ETE4](https://etetoolkit.github.io/ete/)
|
|
19
|
+
- [cogent3](https://cogent3.org/)
|
|
20
|
+
- [Biopython](https://biopython.org/)
|
|
21
|
+
- [scikit-bio](https://scikit.bio)
|
|
22
|
+
- [minimal tree data structure](https://iplotx.readthedocs.io/en/latest/gallery/tree/plot_simpletreedataprovider.html#sphx-glr-gallery-tree-plot-simpletreedataprovider-py) (for educational purposes)
|
|
23
|
+
|
|
24
|
+
In addition to the above, *any* network or tree analysis library can register an [entry point](https://iplotx.readthedocs.io/en/latest/providers.html#creating-a-custom-data-provider) to gain compatibility with `iplotx` with no intervention from our side.
|
|
25
|
+
|
|
26
|
+
**NOTE**: This is currently late beta quality software. The API and functionality might break rarely.
|
|
27
|
+
|
|
28
|
+
## Installation
|
|
29
|
+
```bash
|
|
30
|
+
pip install iplotx
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Quick Start
|
|
34
|
+
```python
|
|
35
|
+
import networkx as nx
|
|
36
|
+
import matplotlib.pyplot as plt
|
|
37
|
+
import iplotx as ipx
|
|
38
|
+
|
|
39
|
+
g = nx.Graph([(0, 1), (1, 2), (2, 3), (3, 4), (4, 0)])
|
|
40
|
+
layout = nx.layout.circular_layout(g)
|
|
41
|
+
fig, ax = plt.subplots(figsize=(3, 3))
|
|
42
|
+
ipx.plot(g, ax=ax, layout=layout)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+

|
|
46
|
+
|
|
47
|
+
## Documentation
|
|
48
|
+
See [readthedocs](https://iplotx.readthedocs.io/en/latest/) for the full documentation.
|
|
49
|
+
|
|
50
|
+
## Gallery
|
|
51
|
+
See [gallery](https://iplotx.readthedocs.io/en/latest/gallery/index.html).
|
|
52
|
+
|
|
53
|
+
## Features
|
|
54
|
+
- Plot networks from multiple libraries including networkx and igraph, using matplotlib as a backend. ✅
|
|
55
|
+
- Plot trees from multiple libraries such as cogent3, ETE4, skbio, and biopython. ✅
|
|
56
|
+
- Flexible yet easy styling, including an internal library of styles ✅
|
|
57
|
+
- Interactive plotting, e.g. zooming and panning after the plot is created. ✅
|
|
58
|
+
- Store the plot to disk thanks to the many matplotlib backends (SVG, PNG, PDF, etc.). ✅
|
|
59
|
+
- Efficient plotting of large graphs using matplotlib's collection functionality. ✅
|
|
60
|
+
- Edit plotting elements after the plot is created, e.g. changing node colors, labels, etc. ✅
|
|
61
|
+
- Animations, e.g. showing the evolution of a network over time. ✅
|
|
62
|
+
- Mouse and keyboard interaction, e.g. hovering over nodes/edges to get information about them. ✅
|
|
63
|
+
- Node clustering and covers, e.g. showing communities in a network. ✅
|
|
64
|
+
- Choice of tree layouts and orientations. ✅
|
|
65
|
+
- Tree-specific options: cascades, subtree styling, split edges, etc. ✅
|
|
66
|
+
- (WIP) Support uni- and bi-directional communication between graph object and plot object.🏗️
|
|
67
|
+
|
|
68
|
+
## Authors
|
|
69
|
+
Fabio Zanini (https://fabilab.org)
|
|
Binary file
|
|
@@ -96,7 +96,6 @@ def _get_shorter_edge_coords(vpath, vsize, theta):
|
|
|
96
96
|
xe = v1[0]
|
|
97
97
|
else:
|
|
98
98
|
m12 = (v2[1] - v1[1]) / (v2[0] - v1[0])
|
|
99
|
-
print(m12, mtheta)
|
|
100
99
|
xe = (v1[1] - m12 * v1[0]) / (mtheta - m12)
|
|
101
100
|
ye = mtheta * xe
|
|
102
101
|
ve = np.array([xe, ye])
|
|
@@ -199,7 +198,6 @@ def _compute_edge_path_straight(
|
|
|
199
198
|
|
|
200
199
|
# Angle of the straight line
|
|
201
200
|
theta = atan2(*((vcoord_fig[1] - vcoord_fig[0])[::-1]))
|
|
202
|
-
print(vcoord_data_cart, vcoord_fig, theta)
|
|
203
201
|
|
|
204
202
|
# Shorten at starting vertex
|
|
205
203
|
vs = _get_shorter_edge_coords(vpath_fig[0], vsize_fig[0], theta) + vcoord_fig[0]
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Make banner image for the package.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import numpy as np
|
|
6
|
+
import pathlib
|
|
7
|
+
from matplotlib import patches
|
|
8
|
+
import matplotlib.pyplot as plt
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def squareify(image):
|
|
12
|
+
height, width, ncols = image.shape
|
|
13
|
+
dmax = max(height, width)
|
|
14
|
+
new = np.zeros((dmax, dmax, ncols), dtype=image.dtype)
|
|
15
|
+
if height > width:
|
|
16
|
+
diff = (height - width) // 2
|
|
17
|
+
new[:, diff : diff + width, :] = image
|
|
18
|
+
new[:, : diff + 3, :] = 1
|
|
19
|
+
new[:, diff + width - 3 :] = 1
|
|
20
|
+
elif width > height:
|
|
21
|
+
diff = (width - height) // 2
|
|
22
|
+
new[diff : diff + height, :, :] = image
|
|
23
|
+
new[: diff + 3, :, :] = 1
|
|
24
|
+
new[diff + height - 3 :, :, :] = 1
|
|
25
|
+
|
|
26
|
+
zoom = 250
|
|
27
|
+
diff = (new.shape[0] - zoom) // 2
|
|
28
|
+
new = new[diff : diff + zoom, diff : diff + zoom, :]
|
|
29
|
+
|
|
30
|
+
return new
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
if __name__ == "__main__":
|
|
34
|
+
# Select random ones to fill a grid
|
|
35
|
+
grid_shape = (4, 6)
|
|
36
|
+
nimages = grid_shape[0] * grid_shape[1]
|
|
37
|
+
|
|
38
|
+
# Folder with the images to patchwork
|
|
39
|
+
image_folder_path = pathlib.Path(__file__).parent.parent / "docs" / "build" / "_images"
|
|
40
|
+
images_all = list(image_folder_path.glob("*_thumb.png"))
|
|
41
|
+
images = [images_all[i] for i in np.random.choice(len(images_all), nimages, replace=False)]
|
|
42
|
+
|
|
43
|
+
k = 2.0
|
|
44
|
+
kx, ky = 1.13, 0.98
|
|
45
|
+
fig, ax = plt.subplots(figsize=(k * grid_shape[1], k * grid_shape[0]))
|
|
46
|
+
for i in range(grid_shape[0]):
|
|
47
|
+
for j in range(grid_shape[1]):
|
|
48
|
+
ij = grid_shape[1] * i + j
|
|
49
|
+
print(ij)
|
|
50
|
+
img = plt.imread(images[ij])
|
|
51
|
+
xmin = kx * (j + 0.5 * int(i % 2))
|
|
52
|
+
xmax = xmin + kx * 1
|
|
53
|
+
ymin = ky * (grid_shape[0] - 1 - i)
|
|
54
|
+
ymax = ymin + ky * 1
|
|
55
|
+
center = xmin + 0.5, ymin + 0.5
|
|
56
|
+
patch = patches.RegularPolygon(
|
|
57
|
+
center,
|
|
58
|
+
6,
|
|
59
|
+
radius=0.65,
|
|
60
|
+
transform=ax.transData,
|
|
61
|
+
facecolor="none",
|
|
62
|
+
edgecolor="black",
|
|
63
|
+
linewidth=1.5,
|
|
64
|
+
)
|
|
65
|
+
ax.add_patch(patch)
|
|
66
|
+
# ax.text(
|
|
67
|
+
# center[0], center[1], str(ij), ha="center", va="center", fontsize=8, color="black"
|
|
68
|
+
# )
|
|
69
|
+
# Extend to square
|
|
70
|
+
img = squareify(img)
|
|
71
|
+
im = ax.imshow(img, extent=(xmin, xmax, ymin, ymax), aspect=1.0)
|
|
72
|
+
im.set_clip_path(patch)
|
|
73
|
+
ax.set(
|
|
74
|
+
xlim=(-0.2 * kx, kx * (grid_shape[1] + 0.5 * int(grid_shape[0] > 1))),
|
|
75
|
+
ylim=(-0.2 * ky, ky * (grid_shape[0] + 0.2)),
|
|
76
|
+
aspect=1.0,
|
|
77
|
+
)
|
|
78
|
+
ax.set_axis_off()
|
|
79
|
+
plt.ion()
|
|
80
|
+
plt.show()
|
|
81
|
+
|
|
82
|
+
fig.savefig(image_folder_path.parent.parent / "source" / "_static" / "banner.png", dpi=100)
|
iplotx-0.5.0/README.md
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-

|
|
2
|
-

|
|
3
|
-

|
|
4
|
-
[](https://coveralls.io/github/fabilab/iplotx?branch=main)
|
|
5
|
-

|
|
6
|
-
|
|
7
|
-
# iplotx
|
|
8
|
-
Plotting networks from igraph and networkx.
|
|
9
|
-
|
|
10
|
-
**NOTE**: This is currently beta quality software. The API and functionality are settling in and might break occasionally.
|
|
11
|
-
|
|
12
|
-
## Installation
|
|
13
|
-
```bash
|
|
14
|
-
pip install iplotx
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
## Quick Start
|
|
18
|
-
```python
|
|
19
|
-
import networkx as nx
|
|
20
|
-
import matplotlib.pyplot as plt
|
|
21
|
-
import iplotx as ipx
|
|
22
|
-
|
|
23
|
-
g = nx.Graph([(0, 1), (1, 2), (2, 3), (3, 4), (4, 0)])
|
|
24
|
-
layout = nx.layout.circular_layout(g)
|
|
25
|
-
fig, ax = plt.subplots(figsize=(3, 3))
|
|
26
|
-
ipx.plot(g, ax=ax, layout=layout)
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-

|
|
30
|
-
|
|
31
|
-
## Documentation
|
|
32
|
-
See [readthedocs](https://iplotx.readthedocs.io/en/latest/) for the full documentation.
|
|
33
|
-
|
|
34
|
-
## Gallery
|
|
35
|
-
See [gallery](https://iplotx.readthedocs.io/en/latest/gallery/index.html).
|
|
36
|
-
|
|
37
|
-
## Roadmap
|
|
38
|
-
- Plot networks from igraph and networkx interchangeably, using matplotlib as a backend. ✅
|
|
39
|
-
- Support interactive plotting, e.g. zooming and panning after the plot is created. ✅
|
|
40
|
-
- Support storing the plot to disk thanks to the many matplotlib backends (SVG, PNG, PDF, etc.). ✅
|
|
41
|
-
- Support flexible yet easy styling. ✅
|
|
42
|
-
- Efficient plotting of large graphs using matplotlib's collection functionality. ✅
|
|
43
|
-
- Support editing plotting elements after the plot is created, e.g. changing node colors, labels, etc. ✅
|
|
44
|
-
- Support animations, e.g. showing the evolution of a network over time. ✅
|
|
45
|
-
- Support mouse interaction, e.g. hovering over or clicking on nodes and edges to get information about them. ✅
|
|
46
|
-
- Support trees from special libraries such as ete3, biopython, etc. This will need a dedicated function and layouting. ✅
|
|
47
|
-
- Support uni- and bi-directional communication between graph object and plot object.🏗️
|
|
48
|
-
|
|
49
|
-
**NOTE:** The last item can probably be achieved already by using `matplotlib`'s existing callback functionality. It is currently untested, but if you manage to get it to work on your graph let me know and I'll add it to the examples (with credit).
|
|
50
|
-
|
|
51
|
-
## Authors
|
|
52
|
-
Fabio Zanini (https://fabilab.org)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_igraph/clustering_directed_large.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_igraph/graph_directed_curved_loops.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_networkx/directed_graph_with_colorbar.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_simple_network_provider/graph_basic.png
RENAMED
|
File without changes
|
{iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_simple_network_provider/graph_directed.png
RENAMED
|
File without changes
|
{iplotx-0.5.0 → iplotx-0.5.1}/tests/baseline_images/test_simple_network_provider/graph_labels.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|