A high-performance desktop application for visualizing the Tree of Life, developed in C# with Windows Forms. This academic project demonstrates how to handle and render large hierarchical datasets (over 36,000 nodes) efficiently by implementing advanced data structures and custom layout algorithms.
- About The Project
- Key Features
- Built With
- Getting Started
- Technical Deep Dive
- Screenshots
- Future Improvements
- License
This project is a data visualization tool designed to explore the phylogenetic Tree of Life in an interactive and educational way. The core challenge was to create a smooth and responsive user experience despite the massive dataset, making complex biological data accessible and engaging.
- Large-Scale Data Handling: Efficiently loads, processes, and renders over 36,000 nodes.
- Interactive Radial Layout: Displays the tree in an intuitive circular format.
- Smooth Navigation: Features seamless zooming (centered on the mouse) and panning (drag-and-drop).
- Dynamic Clustering: Automatically groups dense node clusters to maintain readability at any zoom level.
- Detailed Info Panel: Shows specific information for each node on hover.
- C#
- .NET Framework (with Windows Forms & GDI+)
- Visual Studio
To run this project, you will need Visual Studio with the .NET desktop development workload installed.
- Clone the repository:
git clone https://github.com/nico916/tree-of-life-csharp.git
- Open the solution:
Navigate to the project folder and open the
.sln
file with Visual Studio. - Run the application:
Press
F5
or click the "Start" button in Visual Studio to compile and run the project.
The application is built on an MVC (Model-View-Controller) architecture to separate data logic from the user interface. The most significant technical challenges were performance and data readability.
- Problem: With 36,000+ nodes, detecting which node is under the mouse cursor via a simple loop would be incredibly slow (O(N) complexity), causing the UI to freeze.
- Solution: I implemented a Quadtree, a spatial partitioning data structure. It recursively divides the 2D space into four quadrants, allowing for extremely fast spatial queries. This reduces the search complexity to O(log N), ensuring that interactions like hovering and clicking remain instantaneous, regardless of the dataset size.
- Problem: A standard radial layout would allocate equal angular space to each main branch, causing dense branches (like insects) to become an unreadable, overlapping mess.
- Solution: I designed a custom layout algorithm that allocates angular space proportionally to the number of descendants in each subtree. This gives larger branches more room to expand, creating a much more balanced and legible visualization.
- Implement a search function to find species by name.
- Improve label rendering in highly dense areas to prevent any overlap.
- Integrate more interactive data, such as images and detailed descriptions for selected species.
Distributed under the MIT License. See LICENSE
file for more information.