Draw NetworkX graphs with Altair
nx_altair offers a similar draw API to NetworkX but returns Altair Charts instead.
import networkx as nx import nx_altair as nxa # Generate a random graph G = nx.fast_gnp_random_graph(n=20, p=0.25) # Compute positions for viz. pos = nx.spring_layout(G) # Draw the graph using Altair viz = nxa.draw_networkx(G, pos=pos) # Show it as an interactive plot! viz.interactive()
Customize the visualization
nx_altair also supports many of the same arguments from NetworkX for styling your network--with an Altair twist! Map visualization attributes in a declarative manner.
import numpy as np # Add weights to nodes and edges for n in G.nodes(): G.nodes[n]['weight'] = np.random.randn() for e in G.edges(): G.edges[e]['weight'] = np.random.uniform(1, 10) # Draw the graph using Altair viz = nxa.draw_networkx( G, pos=pos, node_color='weight', cmap='viridis', width='weight', edge_color='black', ) # Show it as an interactive plot! viz.interactive()
To install from PyPI:
pip install nx_altair
To install for development, clone this repos and install using pip
pip install -e .
We welcome pull requests! If you find a bug, we'd love for you to submit a PR. If you're not sure how to do that, check out this simple guide.
If you have a feature request, please open an issue or submit a PR!
A list of things to-do (good ideas for PRs).
drawmethod that mirrors networkx (easy)
- Chart configs (i.e. chart height, weight, etc.) (easy)
- Node color scale vmix, vmax (easy)
- Edge color scale vmix, vmax (easy)
- Node labels (medium)
- Edge labels (medium)
- Mouse-hover interactivity (medium)
- Arrows for edges (hard)
- Support for large (>1000 edge) networks (hard)
- Force-directed interactivity (very hard---beyond altair's current support).