142 lines
6.3 KiB
Markdown
142 lines
6.3 KiB
Markdown
# Graph Visualization Improvement Timeline
|
||
|
||
This document records the main ways the graph visualization pipeline has been refined during the current Rust migration and tuning work.
|
||
|
||
## 2026-03-16 — Baseline migration and pipeline setup
|
||
|
||
- Ported the radial Sugiyama-style layout pipeline from the Java implementation into the Rust crate `radial_sugiyama`.
|
||
- Kept the overall structure:
|
||
- hierarchy leveling
|
||
- dummy-node insertion
|
||
- crossing reduction
|
||
- coordinate assignment
|
||
- radial projection
|
||
- Changed the leveling source on purpose for the target use case:
|
||
- instead of centrality-based levels, levels are computed as hierarchy rings for a DAG
|
||
- this guarantees superclass/interface nodes are placed on inner rings and subclasses on outer rings
|
||
|
||
## 2026-03-16 — Improve parity with the Java implementation
|
||
|
||
- Closed Java → Rust gaps in crossing reduction:
|
||
- restored horizontal crossing counting
|
||
- restored mixed horizontal/vertical crossing counting
|
||
- aligned the sifting stage more closely with the active Java implementation
|
||
- Added richer layout artifacts so the pipeline outputs not only node coordinates, but also:
|
||
- edge offsets
|
||
- routed edge shapes
|
||
- routed node information
|
||
- layout center
|
||
- Ported route generation logic for:
|
||
- spiral inter-level edges
|
||
- intra-level edges
|
||
- straight root-level edges
|
||
|
||
## 2026-03-16 — Add ontology input through Turtle
|
||
|
||
- Added a Turtle import layer using `oxttl`.
|
||
- Imported only `rdfs:subClassOf` triples.
|
||
- Mapped ontology class IRIs to graph nodes.
|
||
- Preserved edge direction as:
|
||
- `superclass -> subclass`
|
||
- This made the layout pipeline usable directly from ontology data instead of requiring manual graph construction.
|
||
|
||
## 2026-03-16 — Add environment-based execution and layout controls
|
||
|
||
- Added a `.env`-driven runner so the pipeline can be configured without recompiling.
|
||
- Moved the main geometric drawing constants into env-backed config:
|
||
- input file location
|
||
- output location
|
||
- minimum radius
|
||
- level spacing
|
||
- positive-coordinate shifting
|
||
- spiral sampling quality
|
||
- border and node-distance scaling
|
||
- This was the first step toward making the visualization tunable instead of fixed.
|
||
|
||
## 2026-03-16 — Add SVG export as the final output step
|
||
|
||
- Added SVG generation after layout execution.
|
||
- Reused the computed graph geometry instead of inventing a separate renderer:
|
||
- node coordinates become SVG circles
|
||
- routed edge points become SVG paths
|
||
- ring levels become background circles
|
||
- labels are drawn from node IRIs
|
||
- This made the pipeline produce a directly inspectable visual artifact.
|
||
|
||
## 2026-03-16 — Investigate readability problems in the first SVG output
|
||
|
||
- Observed two major problems in the rendered output:
|
||
- many nodes on the same level were visually packed into a small arc of the ring
|
||
- some edges wrapped around the center with very long spiral paths
|
||
- Determined that these were not only SVG issues:
|
||
- node clustering came from the current radial projection rule
|
||
- edge wrapping came from the routed edge model and its offset-based spiral construction
|
||
- Compared this behavior with the paper and confirmed:
|
||
- the paper intentionally allows packed angular spans
|
||
- the paper intentionally allows winding spiral edges
|
||
- but these choices may be undesirable for the current ontology-navigation use case
|
||
|
||
## 2026-03-16 — Add an SVG straight-edge mode for experimentation
|
||
|
||
- Added `RADIAL_SVG_SHORTEST_EDGES` so the SVG renderer could ignore routed edge directions/offsets and draw direct shortest node-to-node segments instead.
|
||
- This improved edge length visually, but it introduced a conceptual mismatch:
|
||
- crossing reduction had optimized the graph for wrapped spiral edges
|
||
- rendering direct shortest segments reintroduced many crossings
|
||
- Result:
|
||
- useful as a diagnostic/preview mode
|
||
- not a principled replacement for the original routing objective
|
||
|
||
## 2026-03-16 — Add configurable ring distribution mode
|
||
|
||
- Added `RADIAL_RING_DISTRIBUTION` with two modes:
|
||
- `packed`
|
||
- `distributed`
|
||
- `packed` keeps the paper/Java-style projection:
|
||
- one global width is used to derive angular positions
|
||
- narrower levels may occupy only part of the circle
|
||
- `distributed` changes only the projection step:
|
||
- nodes on the same level are spread around the full ring
|
||
- ring order is preserved, but the level fills the full `2π`
|
||
- This was introduced specifically to improve readability when the packed projection makes ontology branches appear collapsed.
|
||
|
||
## 2026-03-16 — Restrict the ontology view to the BFO `entity` subtree
|
||
|
||
- Added `RADIAL_ROOT_CLASS_IRI`.
|
||
- Defaulted it to:
|
||
- `http://purl.obolibrary.org/obo/BFO_0000001`
|
||
- Added a preprocessing filter step that:
|
||
- imports the full `subClassOf` graph
|
||
- finds the configured root class by exact IRI
|
||
- keeps only the root and its descendants
|
||
- discards unrelated ontology branches before layout
|
||
- This makes the visualization more focused and reduces clutter for the target ontology exploration workflow.
|
||
|
||
## Current visualization controls
|
||
|
||
The current pipeline now supports these major readability/behavior controls through `.env`:
|
||
|
||
- `RADIAL_ROOT_CLASS_IRI` — choose the ontology subtree root
|
||
- `RADIAL_RING_DISTRIBUTION` — choose packed vs distributed ring projection
|
||
- `RADIAL_SVG_SHORTEST_EDGES` — choose routed edges vs direct shortest SVG segments
|
||
- `RADIAL_MIN_RADIUS`
|
||
- `RADIAL_LEVEL_DISTANCE`
|
||
- `RADIAL_NODE_DISTANCE`
|
||
- `RADIAL_SPIRAL_QUALITY`
|
||
|
||
## Current tradeoffs
|
||
|
||
- `packed` rings are closer to the paper and Java behavior, but can visually cluster nodes.
|
||
- `distributed` rings are more readable, but deviate from the original projection philosophy.
|
||
- routed spiral edges are more consistent with the crossing-reduction objective, but can look long and unintuitive.
|
||
- shortest SVG edges are visually direct, but may contradict the layout’s crossing-minimization assumptions.
|
||
- subtree filtering around BFO `entity` improves focus, but intentionally hides unrelated ontology regions.
|
||
|
||
## Current direction of improvement
|
||
|
||
The visualization work is moving toward a readable ontology-browser layout rather than strict reproduction of the original paper. The main current themes are:
|
||
|
||
1. keep the hierarchical ring semantics
|
||
2. reduce clutter by filtering to a meaningful ontology root
|
||
3. make projection and rendering behavior configurable
|
||
4. improve readability without discarding the useful parts of the original radial Sugiyama pipeline
|