mcpField
P
pygraphistry-visualization

pygraphistry-visualization

github.com/graphistryData & databases341 installsUpdated 1d ago
Repository

About pygraphistry-visualization

pygraphistry-visualization is a graph-visualization skill for PyGraphistry users. It covers visual encodings, layouts, rendering controls, focused subgraphs, and sharing privacy settings.

Key features

  1. 01Encode node and edge colors, sizes, and icons
  2. 02Adjust layout and rendering parameters
  3. 03Configure labels, hover highlights, and UI panels
  4. 04Create focused GFQL subgraph views
  5. 05Set graph-sharing privacy levels

Use cases

  1. 01Display graph attributes by category or value
  2. 02Fix layouts using external coordinates
  3. 03Investigate focused subgraphs in large graphs
  4. 04Control who can view shared graphs

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/graphistry/graphistry-skills --skill pygraphistry-visualization

After installing, type/pygraphistry-visualizationin Claude Code to confirm it loaded.

Bundled filesreferences/fa-icons.md

Details

From the project README

PyGraphistry Visualization

Doc routing (local + canonical)

  • First route with ../pygraphistry/references/pygraphistry-readthedocs-toc.md.
  • Use ../pygraphistry/references/pygraphistry-readthedocs-top-level.tsv for section-level shortcuts.
  • Only scan ../pygraphistry/references/pygraphistry-readthedocs-sitemap.xml when a needed page is missing.
  • Use one batched discovery read before deep-page reads; avoid cat * and serial micro-reads.
  • Use local icon lookup notes from references/fa-icons.md.
  • In user-facing answers, prefer canonical https://pygraphistry.readthedocs.io/en/latest/... links.

Core pattern

g2 = (
    # Keep a plain 'type' column on both nodes and edges for legend-friendly defaults
    g.bind(point_label='label', point_color='type', edge_color='type')
     .encode_point_color('type', categorical_mapping={'agent': '#3b82f6'}, default_mapping='#94a3b8')
     # Optional: default node sizing is often degree for exploratory passes
     .encode_point_size('degree')
     .settings(url_params={'play': 3000, 'info': True})
)
g2.plot()

External layout pattern

# nodes_df contains x/y layout columns
g2 = graphistry.edges(edges_df, 'src', 'dst').nodes(nodes_df, 'id').bind(point_x='x', point_y='y').settings(url_params={'play': 0})
g2.plot()

URL parameters reference

Use settings(url_params={...}) to control visualization behavior. Full reference: https://hub.graphistry.com/docs/api/1/rest/url/#urloptions

Layout
ParamTypeDefaultRangeDescription
playint50000-10000 (0, 1000, 2000, 5000)Layout duration ms. 0=fixed
lockedXboolfalseLock X axis (with bind(point_x=...))
lockedYboolfalseLock Y axis (with bind(point_y=...))
lockedRboolfalseLock radial position
linLogboolfalseStrong separation; good for <1000 nodes
scalingRatiofloat1.00.1-10 (0.5, 1, 2, 5)Expansion ratio. Combine with linLog
strongGravityboolfalseCompact layout with pull to center
dissuadeHubsboolfalseReduce hub dominance in layout
gravityfloat1.00.1-10 (0.1, 1, 2, 10)Pull strength toward center
edgeInfluencefloat1.00-10 (0, 0.7, 1, 2, 5, 7)Edge weight impact on layout
precisionVsSpeedfloat1.00.1-10 (0.1, 1, 10)Higher=precise but slower
left/right/top/bottomintautoManual camera bounds on load
Scene / Rendering
ParamTypeDefaultRangeDescription
pointSizefloat1.00.1-10 (0.3, 0.5, 1, 2, 3)Point size multiplier (not encoding)
pointOpacityfloat1.00-1 (0.3, 0.5, 0.8, 1)Node transparency
pointStrokeWidthfloat00-5 (0, 1, 2)Node border width
edgeCurvaturefloat00-1 (0, 0.5, 1)Edge bending amount
edgeOpacityfloat1.00-1 (0.3, 0.5, 0.8, 1)Edge transparency
showArrowsbooltrueShow edge direction arrows
neighborhoodHighlightstrbothincoming/outgoing/both/nodeHover highlight mode
neighborhoodHighlightHopsint11-5 (1, 2, 3)Hops in hover highlight
Labels / Points of Interest
ParamTypeDefaultRangeDescription
showLabelsbooltrueToggle all label visibility
showLabelOnHoverbooltrueShow labels only on hover
showPointsOfInterestbooltrueHighlight key nodes as POI
showPointsOfInterestLabelbooltrueShow labels on POI nodes
pointsOfInterestMaxint50-100 (0, 5, 10, 20)Max POIs. 0=disable
shortenLabelsbooltrueTruncate long labels
showLabelPropertiesOnHoverboolfalseShow extra properties on hover
labelOpacityfloat1.00-1 (0.5, 0.8, 1)Label transparency
labelColorstrhex no # (000000, FFFFFF)Label text color
labelBackgroundstrhex no # (000000, FFFFFF)Label bg color

Note: URL params use hex without #. Python API (encode_*, palette) uses # prefix.

UI Controls
ParamTypeDefaultDescription
menubooltrueShow all menus
infobooltrueShow graph size stats
showHistogramsbooltrueShow histogram panel
showInspectorbooltrueShow entity inspector
showCollectionsboolfalseShow collections panel
Examples
# Ring layout with strong separation for small graphs (<1000 nodes)
g2 = g.settings(url_params={'play': 3000, 'linLog': True, 'scalingRatio': 2.0})

# Fixed position layout (external coordinates)
g2 = g.bind(point_x='x', point_y='y').settings(url_params={'play': 0, 'lockedX': True, 'lockedY': True})

# Disable POI labels entirely
g2 = g.settings(url_params={'showLabels': False, 'pointsOfInterestMax': 0})

# Larger points, more transparent edges
g2 = g.settings(url_params={'pointSize': 3.0, 'edgeOpacity': 0.3})

# Minimal UI for embedding
g2 = g.settings(url_params={'menu': False, 'info': False, 'showHistograms': False, 'showInspector': False})

Icon/badge pattern

g2 = (
    g.encode_point_icon('type', categorical_mapping={'person': 'user', 'org': 'building'})
     .encode_point_badge('risk', categorical_mapping={'high': 'exclamation-triangle'})
)
g2.plot()

Use valid Font Awesome names and keep icon mappings category-driven by type. See references/fa-icons.md for lookup links and examples.

Continuous-color pattern (beyond categorical maps)

g2 = g.encode_edge_color('amount', palette=['#46327e', '#1fa187', '#fde724'], as_continuous=True)
g2.plot()

Focused subgraph views (collection-like workflow)

# Use GFQL slices to publish multiple focused views from one base graph (use .gfql(), not deprecated .chain())
high_risk = g.gfql([...]).name('high-risk-slice')
partner_flow = g.gfql([...]).name('partner-flow-slice')
urls = [high_risk.plot(render=False), partner_flow.plot(render=False)]

Privacy-safe sharing pattern

graphistry.privacy(mode='private')
plot_url = g.plot(render=False)
  • Use explicit graphistry.privacy(mode='private'|'organization'|'public') before plotting share links.
  • Do not treat plot() kwargs like as_files or memoize as privacy controls.

Common tasks

  • Encodings: encode_point_color, encode_edge_color, encode_point_size, encode_point_icon, encode_point_badge.
  • Layouts: runtime force layout settings, ring/GIB/modularity, graphviz/igraph/cugraph plugin layouts.
  • Static outputs: plot_static() for SVG/PNG and text engines like graphviz-dot/mermaid-code.
  • Sharing controls: graphistry.privacy(mode='private'|'organization'|'public').
  • For advanced gradients, use palette=[...] with as_continuous=True on encode_point_color/encode_edge_color.
  • For large investigations, generate multiple focused GFQL slices instead of one overloaded plot.

Big-graph defaults

  • Filter and aggregate before plotting.
  • Keep only essential columns (drop large text blobs unless needed).
  • Use focused subgraphs (time slice, one-hop neighborhood, top-k signals).
  • Prefer plain type columns on both nodes and edges so legends and default category encodings stay stable.
  • Avoid dotted column names like node.type / edge.type; prefer plain names.
  • Use native datetime types for time encodings and time-sliced comparisons.

Canonical docs

Comments

Markdown supported