From f1b58c16171b06926c335b9e2d458a06887fd353 Mon Sep 17 00:00:00 2001 From: BadPrograms Date: Wed, 10 Dec 2025 16:51:03 +0100 Subject: [PATCH 1/3] no_leaves --- src/lineagetree/plot.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lineagetree/plot.py b/src/lineagetree/plot.py index f644b6f..1616a7f 100644 --- a/src/lineagetree/plot.py +++ b/src/lineagetree/plot.py @@ -20,13 +20,14 @@ def __plot_nodes( color: str | dict | list, size: int | float, ax: plt.Axes, + leaves: set, default_color: str = "black", **kwargs, ) -> None: """ Private method that plots the nodes of the tree. """ - + hier = {k: v for k, v in hier.items() if k not in leaves} if isinstance(color, dict): color = [color.get(k, default_color) for k in hier] elif isinstance(color, str | list): @@ -142,6 +143,7 @@ def draw_tree_graph( size=size, ax=ax, default_color=default_color, + leaves={k for k, v in lnks_tms["links"].items() if not v}, **kwargs, ) if not color_of_edges: From 77941ddd46ad5809c3052b8abde1f6f965449f17 Mon Sep 17 00:00:00 2001 From: BadPrograms Date: Thu, 11 Dec 2025 10:16:18 +0100 Subject: [PATCH 2/3] slightly faster --- src/lineagetree/plot.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/lineagetree/plot.py b/src/lineagetree/plot.py index 1616a7f..63b4c89 100644 --- a/src/lineagetree/plot.py +++ b/src/lineagetree/plot.py @@ -1,5 +1,6 @@ from __future__ import annotations +import copy import warnings from collections.abc import Iterable from typing import Literal, TYPE_CHECKING @@ -27,14 +28,17 @@ def __plot_nodes( """ Private method that plots the nodes of the tree. """ - hier = {k: v for k, v in hier.items() if k not in leaves} + hier_no_leaves = copy.copy(hier) + for leaf in leaves: + hier_no_leaves.pop(key, None) if isinstance(color, dict): - color = [color.get(k, default_color) for k in hier] + color = [color.get(k, default_color) for k in hier_no_leaves] elif isinstance(color, str | list): color = [ - color if node in selected_nodes else default_color for node in hier + color if node in selected_nodes else default_color + for node in hier_no_leaves ] - hier_pos = np.array(list(hier.values())) + hier_pos = np.array(list(hier_no_leaves.values())) ax.scatter(*hier_pos.T, s=size, zorder=10, color=color, **kwargs) From d579744e3677e55f81fd2d055a9da3bba68cb81a Mon Sep 17 00:00:00 2001 From: BadPrograms Date: Thu, 11 Dec 2025 10:25:15 +0100 Subject: [PATCH 3/3] fix --- src/lineagetree/plot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lineagetree/plot.py b/src/lineagetree/plot.py index 63b4c89..3693336 100644 --- a/src/lineagetree/plot.py +++ b/src/lineagetree/plot.py @@ -30,7 +30,7 @@ def __plot_nodes( """ hier_no_leaves = copy.copy(hier) for leaf in leaves: - hier_no_leaves.pop(key, None) + hier_no_leaves.pop(leaf, None) if isinstance(color, dict): color = [color.get(k, default_color) for k in hier_no_leaves] elif isinstance(color, str | list):