Each cell is generated in a synthetic 2D expression plane along a branching lineage — a trunk phase, then a bifurcation into two daughter fates, with random noise for biological/technical variability. A minimum spanning tree (MST) connects all cells by Euclidean distance in that plane, exactly as trajectory tools like Monocle and Slingshot infer a lineage graph without assuming the branch structure in advance.
Instead of plotting the raw expression coordinates, this view draws the MST as a radial dendrogram: every cell's angle comes purely from tree topology (leaves get an equal angular slice, an internal node's angle is the average of its children's), and every cell's radius is its pseudotime — the summed edge length from the root to that cell along the one unique path the tree allows:
MST = argmin over spanning trees T of Σ (u,v)∈T d(u, v)
pseudotime(x) = Σ w(e) over edges e on the unique path root → x
radial layout: angle(leaf_k) = 2π·k / (#leaves)
angle(node) = mean(angle(children))
radius(node) = pseudotime(node)
Branch points — nodes where the tree has three or more neighbours — appear exactly where the sunburst forks. Re-rooting doesn't move a single cell's underlying data; it only changes which node sits at radius 0, which topology is "downstream," and therefore reshapes the whole dendrogram around the new origin — the same operation Slingshot performs when you choose a different root.
- Sliders — reshape the underlying biology: more cells, more noise, a wider fork (harder for the MST to keep both branches separated), or an earlier/later bifurcation.
- Click a cell — selects it and shows its current pseudotime.
- Set selected cell as root — recomputes pseudotime and re-lays out the entire radial tree from that cell, without regenerating any data.