You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Ex: I have an outlier that is very distant from the rest of the tree, so it makes all the other distances squashed and hard to distinguish.
Flippable tree
E.g. clade ordering is arbitrary, may be nice to flip tree by sorting ascending/descending distances, by size of the clades (e.g. number of children), by metadata if equidistant, etc
Could also be cool to select an internal node and then flip vertically from there (e.g. top children now are bottom)
Filter nodes by metadata
Remove nodes from the tree based on metadata values
May also be a nice way to have a user handle an outlier (just click on a node and delete it, if internal, maybe delete all children too?)
Multi-layer node metadata visualization
Can choose which metadata variable to visualize
I've attached an example tree with an outlier node (that also doesn't have associated metadata) and metadata (categorical and numeric).
We also talked about some sort of "select and average" feature. Not sure how that would work or what calculation mechanism would be actually useful. I'll rely on you all to tell me that. But we can certainly implement some sort of drag-box-to-select and run any reasonably simple calculation on the selected nodes, e.g. compute the average of each unique pair of nodes within the selection.
Select multiple nodes and average (waiting on clarification)
For the crossed out ones, I don't want to do these for now, or probably ever, unless we have really concrete evidence that many users will use it, because it will add significant complexity to the code and UI. E.g. you now need a reset button and an indication that nodes were removed and where, and you probably want an undo/redo state history so you don't have to start from scratch after a mis-click. It then also begs the question of why other components don't support removing specific datums by hand. I'm anal about consistency, but I think it also annoys and confuses users when things aren't consistent. So implementing this in the tree component would insist that I implement it everywhere. I feel like filtering by type (#72) should be useful enough.
A reminder that when I'm talking about what I'm implementing in the PR and codebase, I'm referring to what all users will see in perpetuity in the app. I added the ability to just paste your own data for the component to render, so if you wanted to hand-remove specific nodes, you can do that directly in your data.
Activity
vincerubinetti commentedon Jun 25, 2026
We also talked about some sort of "select and average" feature. Not sure how that would work or what calculation mechanism would be actually useful. I'll rely on you all to tell me that. But we can certainly implement some sort of drag-box-to-select and run any reasonably simple calculation on the selected nodes, e.g. compute the average of each unique pair of nodes within the selection.
vincerubinetti commentedon Jun 29, 2026
I intend for #71 to close this issue (for now). It's not completely finished though. Here's my breakdown of the requests and tasks:
Flip tree around arbitrary selected nodeDelete arbitrary nodeFor the crossed out ones, I don't want to do these for now, or probably ever, unless we have really concrete evidence that many users will use it, because it will add significant complexity to the code and UI. E.g. you now need a reset button and an indication that nodes were removed and where, and you probably want an undo/redo state history so you don't have to start from scratch after a mis-click. It then also begs the question of why other components don't support removing specific datums by hand. I'm anal about consistency, but I think it also annoys and confuses users when things aren't consistent. So implementing this in the tree component would insist that I implement it everywhere. I feel like filtering by type (#72) should be useful enough.
A reminder that when I'm talking about what I'm implementing in the PR and codebase, I'm referring to what all users will see in perpetuity in the app. I added the ability to just paste your own data for the component to render, so if you wanted to hand-remove specific nodes, you can do that directly in your data.
Tree enhancements (#71)