Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Visualize networks, graphs, citation maps, and relational data
.claude/skills/brycewang-stanford-network-visualization-guide/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✓→✓ | = Same ✓ | 41% | 0% |
| case-06 | ✓→✓ | = Same ✓ | 73% | 0% |
| case-07 | ✓→✓ | = Same ✓ | 95% | 0% |
| case-08 | ✓→✓ | = Same ✓ | 43% | 0% |
| case-09 | ✓→✓ | = Same ✓ | 111% | 0% |
A skill for visualizing networks, graphs, and relational data in research. Covers NetworkX for analysis, layout algorithms, publication-quality styling, and tools for citation networks, social networks, and knowledge graphs.
Network visualization is appropriate when your data involves relationships:
- Citation networks (papers citing other papers)
- Co-authorship networks (researchers who collaborate)
- Social networks (individuals connected by interactions)
- Biological networks (protein interactions, gene regulation)
- Knowledge graphs (concepts linked by relationships)
- Trade/flow networks (countries, organizations, resources)Nodes (vertices): The entities in your network
Edges (links): The relationships between entities
Directed: Edges have direction (A -> B)
Undirected: Edges are bidirectional (A -- B)
Weighted: Edges have a strength or valuepythonimport networkx as nx def build_citation_network(citations: list[tuple]) -> dict: """ Build and analyze a citation network. Args: citations: List of (citing_paper, cited_paper) tuples """ G = nx.DiGraph() G.add_edges_from(citations) metrics = { "n_nodes": G.number_of_nodes(), "n_edges": G.number_of_edges(), "density": nx.density(G), "most_cited": sorted( G.in_degree(), key=lambda x: x[1], reverse=True )[:10], "most_citing": sorted( G.out_degree(), key=lambda x: x[1], reverse=True )[:10], "connected_components": nx.number_weakly_connected_components(G) } # PageRank (importance measure) pagerank = nx.pagerank(G) metrics["top_pagerank"] = sorted( pagerank.items(), key=lambda x: x[1], reverse=True )[:10] return metrics
pythonimport matplotlib.pyplot as plt def plot_network(G: nx.Graph, layout: str = "spring", node_size_attr: str = None, title: str = "Network") -> None: """ Create a publication-quality network visualization. Args: G: NetworkX graph object layout: Layout algorithm (spring, kamada_kawai, circular, spectral) node_size_attr: Node attribute to scale node sizes by title: Plot title """ layouts = { "spring": nx.spring_layout(G, k=1.5, seed=42), "kamada_kawai": nx.kamada_kawai_layout(G), "circular": nx.circular_layout(G), "spectral": nx.spectral_layout(G) } pos = layouts.get(layout, nx.spring_layout(G, seed=42)) # Node sizes based on degree if no attribute specified if node_size_attr and nx.get_node_attributes(G, node_size_attr): sizes = [G.nodes[n].get(node_size_attr, 10) * 50 for n in G.nodes] else: degrees = dict(G.degree()) sizes = [degrees[n] * 50 + 20 for n in G.nodes] fig, ax = plt.subplots(figsize=(12, 10)) nx.draw_networkx_edges(G, pos, alpha=0.2, edge_color="gray", ax=ax) nx.draw_networkx_nodes(G, pos, node_size=sizes, node_color="steelblue", alpha=0.7, ax=ax) # Label only high-degree nodes threshold = sorted(dict(G.degree()).values(), reverse=True)[:10][-1] labels = {n: n for n, d in G.degree() if d >= threshold} nx.draw_networkx_labels(G, pos, labels, font_size=8, ax=ax) ax.set_title(title, fontsize=14) ax.axis("off") plt.tight_layout() plt.savefig("network.pdf", bbox_inches="tight", dpi=300)
| Layout | Best For | Properties | |--------|---------|------------| | Spring (Fruchterman-Reingold) | General purpose | Clusters emerge naturally | | Kamada-Kawai | Small-medium networks | Minimizes edge crossings | | Circular | Comparing connectivity | All nodes equidistant from center | | Spectral | Community structure | Based on graph Laplacian eigenvectors | | Hierarchical (Sugiyama) | DAGs, trees | Top-down layered layout | | Force Atlas 2 | Large networks | Gravity-based, good for Gephi |
Gephi:
- Interactive exploration of large networks
- Force Atlas 2 layout, community detection
- Export publication-quality SVG/PDF
- Best for exploratory analysis
VOSviewer:
- Bibliometric networks (co-citation, co-authorship)
- Reads Web of Science and Scopus exports directly
- Density and overlay visualizations
- Standard tool in bibliometrics research
Cytoscape:
- Biological network visualization
- Extensive plugin ecosystem for bioinformatics
- Pathway analysis and enrichment
D3.js:
- Interactive web-based network diagrams
- Full customization via JavaScript
- Best for interactive publications1. Reduce visual clutter:
- Filter: Show only edges above a weight threshold
- Aggregate: Collapse clusters into supernodes
- Prune: Remove isolates and low-degree nodes
2. Use visual encoding meaningfully:
- Node size = importance (degree, PageRank, citation count)
- Node color = community/category
- Edge width = relationship strength
- Edge color = relationship type
3. Always include:
- A legend explaining visual encodings
- Network statistics (N nodes, M edges, density)
- Description of the layout algorithm used
- Scale context (what does a node/edge represent?)For networks with more than 500 nodes, static visualization becomes difficult to read. Consider interactive visualizations for supplementary materials, or show a filtered/aggregated view in the main paper with the full network available online.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 22,495 | 16,803 | -25% | 1 | 1 | 0% | 4,281 | 4,933 | +15% | 0 | 0 | — |
case-02 | fail→fail | 27,063 | 25,911 | -4% | 1 | 1 | 0% | 3,941 | 5,560 | +41% | 0 | 0 | — |
case-03 | fail→fail | 17,308 | 17,021 | -2% | 1 | 1 | 0% | 3,465 | 4,533 | +31% | 0 | 0 | — |
case-04 | fail→fail | 17,127 | 17,886 | +4% | 1 | 1 | 0% | 2,808 | 4,626 | +65% | 0 | 0 | — |
case-05 | pass→pass | 14,535 | 11,601 | -20% | 1 | 1 | 0% | 2,313 | 3,268 | +41% | 0 | 0 | — |
case-06 | pass→pass | 14,836 | 14,321 | -3% | 1 | 1 | 0% | 2,258 | 3,912 | +73% | 0 | 0 | — |
case-07 | pass→pass | 14,053 | 14,609 | +4% | 1 | 1 | 0% | 2,006 | 3,912 | +95% | 0 | 0 | — |
case-08 | pass→pass | 16,119 | 13,355 | -17% | 1 | 1 | 0% | 2,451 | 3,511 | +43% | 0 | 0 | — |
case-09 | pass→pass | 7,611 | 5,252 | -31% | 1 | 1 | 0% | 1,083 | 2,281 | +111% | 0 | 0 | — |
case-10 | pass→pass | 10,854 | 8,705 | -20% | 1 | 1 | 0% | 1,690 | 2,910 | +72% | 0 | 0 | — |
case-11 | pass→pass | 10,705 | 5,807 | -46% | 1 | 1 | 0% | 1,682 | 2,407 | +43% | 0 | 0 | — |
case-12 | pass→pass | 19,461 | 18,511 | -5% | 1 | 1 | 0% | 2,848 | 4,774 | +68% | 0 | 0 | — |
case-13 | pass→pass | 15,800 | 12,542 | -21% | 1 | 1 | 0% | 2,504 | 3,435 | +37% | 0 | 0 | — |
case-14 | pass→pass | 22,445 | 21,589 | -4% | 1 | 1 | 0% | 3,210 | 5,072 | +58% | 0 | 0 | — |
case-15 | pass→pass | 16,110 | 16,947 | +5% | 1 | 1 | 0% | 2,523 | 3,884 | +54% | 0 | 0 | — |
case-16 | pass→pass | 15,699 | 18,979 | +21% | 1 | 1 | 0% | 2,273 | 4,237 | +86% | 0 | 0 | — |
case-17 | pass→pass | 12,224 | 11,834 | -3% | 1 | 1 | 0% | 1,783 | 3,545 | +99% | 0 | 0 | — |
case-18 | pass→pass | 16,102 | 19,620 | +22% | 1 | 1 | 0% | 3,071 | 4,942 | +61% | 0 | 0 | — |
case-19 | pass→pass | 12,873 | 12,799 | -1% | 1 | 1 | 0% | 2,512 | 4,070 | +62% | 0 | 0 | — |
case-20 | pass→pass | 15,727 | 14,942 | -5% | 1 | 1 | 0% | 2,370 | 4,504 | +90% | 0 | 0 | — |
case-21 | pass→pass | 15,550 | 18,267 | +17% | 1 | 1 | 0% | 2,594 | 4,571 | +76% | 0 | 0 | — |
case-22 | fail→fail | 15,095 | 12,674 | -16% | 1 | 1 | 0% | 2,056 | 3,802 | +85% | 0 | 0 | — |
case-23 | pass→pass | 14,701 | 9,831 | -33% | 1 | 1 | 0% | 2,300 | 3,198 | +39% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of 0 percentage points is the difference between those two pass rates over the 23 comparable cases.
Other measured skills in the registry, with their headline benchmark lift.