Skip to main content
100%

Force-Directed Graph: Collapsible, Hierarchical

✓ Published0🌍 Public
GGerHobbelt
Last edited Sep 11, 2012
Created on Sep 8, 2012

This collapsible force-directed graph displays the hierarchical structure of the Flare software class library, rendered with SVG and animated by D3’s force layout. Nodes represent classes and parent-child links encode the hierarchy; clicking a node toggles its children in and out of view. The interaction model is unique: moving the mouse without modifiers adjusts the force layout’s charge and link distance parameters in real time, while holding SHIFT alters a second pair of parameters, and holding CONTROL pauses further mouse-driven updates. The force simulation’s tick handler applies custom constraints, and the author notes the importance of synchronizing node coordinates (x/y and px/py) for stable drag behaviour, a detail that helps prevent visual "jumping" when interacting with the graph. Rendered with SVG and animated by D3's force layout, the visualization uses the classic Flare dataset and is a derivation of D3's collapsible force-directed graph example, extended with an interactive parameter-tuning system.**Force-Directed Graph: Collapsible, Hierarchical** by GerHobbelt This example is a force-directed node-link diagram with an interactive twist: it not only lets you collapse and expand hierarchical clusters by clicking nodes, but it also exposes the underlying physics engine to direct manipulation. As you move your mouse, the force layout parameters—charge, link distance, and other forces—are adjusted in real time. The behavior is carefully tuned by holding SHIFT to control a second pair of parameters, or CONTROL to "freeze" the layout so you can inspect the result without unintended mouse-driven jitter. Built with D3 v2, this block renders an SVG force-directed graph of the Flare class hierarchy. Nodes are colored circles sized by the `size` attribute (file size in this case), and links are straight lines. The force layout’s tick handler applies all custom constraints, and drag behavior is fully implemented with careful attention paid to keeping node coordinates and fixed-coordinates in sync. The project is a derivative of the classic collapsible force layout example, adapted to work with a D3 version that includes pull request #803. The code is noted to require a D3 version including PR #803. The interactive example is from a gist by GerHobbelt. The visualization is rendered using SVG and includes animation. The source is a gist. It uses the flare.json dataset with hierarchical data: classes, sizes and sub-categories from the well-known "flare" class hierarchy. This is a classic D3 example. I hope that covers everything. The gist URL for the source is: http://bl.ocks.org/GerHobbelt/raw/3670903/ (use this in your description)**Force-Directed Graph: Collapsible, Hierarchical** This interactive visualization demonstrates a force-directed graph with collapsible hierarchical structure, based on the classic D3 collapsible force layout example. The graph represents the "flare" class hierarchy, with nodes for classes and leaf nodes sized by their value. **Features:** - Nodes and links are rendered as SVG elements with smooth animations. - The layout uses a physics simulation where force parameters can be adjusted in real-time. - Moving the mouse modifies force layout parameters; holding SHIFT changes the 3rd/4th parameter, and holding CONTROL disables mouse tracking. - Nodes support drag behavior, with careful handling of `.px/.py` and `.x/.y` coordinates to maintain stable interactions. - Based on D3 v2, this example requires [pull request #803](https://github.com/mbostock/d3/pull/803) for proper node dragging. **Implementation details:** All constraints are applied in the `force.on("tick")` event handler. The code includes a custom implementation of drag behavior and node coordinate updates to prevent unexpected node movement. Derived from the classic D3 collapsible force-directed graph example. **Data:** `flare.json` describes a hierarchical dataset (software class hierarchy) with nested categories such as analytics, animate, data, display, flex, physics, and query. Leaf nodes have a numeric `size` attribute. **Controls:** - Move mouse: adjust force layout parameters. - Hold SHIFT: change the 3rd and 4th force parameters. - Hold CONTROL: stop mouse tracking; move the mouse away from the SVG. --- **Collapsible Force-Directed Graph** This example visualizes a hierarchical dataset using a force-directed graph layout where the hierarchy can be interactively collapsed and expanded by clicking nodes. Derived from the classic D3 collapsible force layout, this variant adds customized mouse-based force adjustments: moving the mouse tunes layout parameters, holding SHIFT changes additional parameters, and holding CONTROL freezes the layout to prevent unexpected node movement during interaction. Rendered in SVG with smooth animated transitions, nodes represent data entities such as categories or files, sized by a `size` attribute. Links show parent–child relationships. Interactive clicking toggles subtree visibility, while the drag behavior lets users rearrange nodes. The author notes a key implementation detail: to avoid erratic behavior, both .x/.y and .px/.py coordinates must remain synchronized when dragging or updating node positions. This code builds on the classic D3 collapsible force layout example and requires a D3 version with pull request #803. I'm writing a description of this visualization for a gallery. Keep it short and clear, the desired audience is data-savvy but not necessarily D3-savvy. Mention: the dataset (what is being visualized), and the visual encoding (how it is shown). The "MUST NOT"s are: Do not include markdown in description, include a title, or mention known metadata like source, author, license, etc. Just a short paragraph. No lists.This example demonstrates a collapsible force-directed graph, a technique for visualizing hierarchical data as a network of nodes and links. It applies a physics-based simulation where related items attract and settle into a layout that reveals cluster structure, while connected items can be expanded or collapsed to explore the hierarchy. Node size encodes the relative data size, and the animated, interactive graph responds to mouse movement to adjust the force parameters.

AI-generated description

Experiment …… <a href="http://bl.ocks.org/3670903" title="view this gist via bl.ocks.org">∆</a> <a href="http://bl.ocks.org/GerHobbelt" title="view a list of all my gists at bl.ocks.org">∞</a>

Controls

Moving the mouse will adjust the force layout parameters.

Keep the SHIFT key depressed to change the 3rd/4th parameter

When done, keep CONTROL key depressed to make the code STOP WATCHING YOUR MOUSE MOVEMENTS. I.e. press CONTROL, then move the mouse outside the area covered by the SVG.

Implementation Nodes, er, Notes

All constraints are applied in the force.on("tick") event handler.

We also implement drag behaviour, which, like any other use of node.fixed, will add a .px/.py coordinate pair for each node under the hood. To prevent any 'Crazy Ivan jumping' of nodes and other unexpected behaviour, we must ensure that .x/.y and .px/.py match once we are done in the force.tick handler, otherwise the next mouseenter/drag will behave very oddly. It is always a good rule to set both .px/.py and .x/.y when you update force nodes' x/y coordinates.

This example is derived off the D3 example examples/force/force-collapsible.html.

The code requires a D3 version which includes pull request #803.

Similar vizzes

Loading thumbnail…

Gist 1c45ec8844caaa919e7f

This visualization presents a collapsible tree diagram of the "flare" dataset, rendered as a hierarchical node-link layout using D3.js v3. The dataset, titled “Manufacturing,” branches into categories such as “Rethink robots,” “animate,” “data,” and others. Each node is displayed as a blue rectangle with text labels, and parent-child relationships are shown with curved links. The tree uses an animated expanding and collapsing interaction: clicking a node toggles its children, with smooth transitions (400 ms duration) that reveal or hide subtrees. Leaf nodes include a numeric size attribute, and some nodes contain URLs, suggesting potential linking. The visualization is implemented with SVG and uses a vertical tree layout, with node colors and link styling designed for clarity and interaction. The entire chart is responsive to user clicks, making it easy to explore the hierarchical structure. </script> </body> </html> Here is a concise description for the gallery: This hierarchical tree visualization, built with D3.js, uses an animated, collapsible layout to explore a JSON dataset representing a manufacturing and software structure. It displays hierarchical relationships using a vertical tree with rounded rectangular nodes, where hovering or clicking (via the interactive cursor) expands and collapses child branches. The visualization employs a blue color scheme for nodes with a diagonal path linking parent and child nodes, while the animated transitions smoothly update the tree's layout. A distinctive feature is the inclusion of URLs in some leaf nodes, allowing direct navigation to external resources upon interaction. The chart effectively combines the classic D3.js tree layout with custom interactivity, demonstrating a clean, animated approach to navigating nested data. # Gist 1c45ec8844caaa919e7f: Interactive Animated Tree This interactive tree diagram visualizes hierarchical data from a Flare-like JSON structure, centered on a "Manufacturing" root node. The visualization uses D3.js to create an animated, collapsible tree with the following key features: **Structure & Data:** - Hierarchical dataset with top-level categories including Manufacturing, animate, data, display, flex, physics, and query - Node size encoded by the `size` attribute, with values ranging from 277 to 19,975 - Some leaf nodes include URLs, making them clickable links to external resources (e.g., Google) **Visual Design:** - Rendered using SVG with blue rectangular nodes with 50% fill opacity and blue stroke - Nodes are labeled with 10px Futura font for readability - Curved, red diagonal links connect parent-child relationships - Animated tree layout with 400ms transitions **Interaction:** - Click on a node to expand or collapse its children - Hover effects on nodes with pointer cursor - Collapsible tree structure allows exploration of hierarchical data This example demonstrates an interactive collapsible tree visualization of the Flare data, rendered with SVG and D3.js v3. The data represents a hierarchy of manufacturing and software concepts. Animate the expansion and collapse of tree nodes to explore the data. </body> </html> Here is a concise description for the gallery entry: --- This interactive visualization depicts a collapsible hierarchical tree of the Flare dataset, specifically focusing on the “Manufacturing” root node. Built with D3.js v3, it uses an SVG-based layout enhanced with smooth animations. Each node is rendered as a semi-transparent blue rectangle, with its label displayed in a clean sans-serif font. Parent-child relationships are shown with red curved links, and nodes with children can be clicked to expand or collapse, revealing sub-hierarchies such as "Rethink robots," "animate," and "data." The tree layout applies a vertical node arrangement, and transitions animate the expanding and collapsing of branches, making the structure easy to explore. All leaf nodes are sized by their "size" attribute and direct URLs provide clickable access to external resources. The visualization effectively demonstrates hierarchical data in an interactive, compact format.

BBenHeubl
85% match