From e35226dab0b8eb4d735d433f492c6b56defe05ca Mon Sep 17 00:00:00 2001
From: Lionel GUEZ <guez@lmd.ens.fr>
Date: Mon, 4 Jul 2022 18:08:31 +0200
Subject: [PATCH] Add the option to label a list of nodes

---
 Overlap/plot_components.py | 33 ++++++++++++++++++++++-----------
 1 file changed, 22 insertions(+), 11 deletions(-)

diff --git a/Overlap/plot_components.py b/Overlap/plot_components.py
index 50cdcd85..da77c21a 100755
--- a/Overlap/plot_components.py
+++ b/Overlap/plot_components.py
@@ -35,9 +35,11 @@ def is_node_type(G, n, label):
         return True
     elif label == "important":
         return G.in_degree[n] == 0 or G.out_degree[n] == 0 or G.degree[n] >= 3
-    elif isinstance(label, int):
+    elif label[0] == "date":
         return report_graph.node_to_date_eddy(n, G.graph["e_overestim"],
-                                              only_date = True) == label
+                                              only_date = True) == label[1]
+    elif label[0] == "node":
+        return n in label[1]
 
 def plot_nbunch(G, nbunch, color = '#1f78b4', label = None, ax = None):
     if ax is None: ax = plt.gca()
@@ -104,9 +106,13 @@ if __name__ == "__main__":
     parser.add_argument("edgelist", help = "path to input CSV file")
     parser.add_argument("shpc_dir", help = "directory containing SHPC, with "
                         "visible eddies at all dates")
-    parser.add_argument("-l", "--label",
-                        help = '"root", "leaf", "split", "merge", "all", '
-                        '"important" or integer for date index')
+    group = parser.add_mutually_exclusive_group()
+    group.add_argument("-l", "--label_type",
+                        choices = ["root", "leaf", "split", "merge", "all",
+                                   "important"])
+    group.add_argument("--label_date", type = int, metavar = "DATE_INDEX")
+    group.add_argument("--label_node", metavar = 'NODE', type = int,
+                       nargs = "+")
     parser.add_argument("-s", "--save", metavar = "format",
                         help = "Save file to specified format")
     parser.add_argument("-t", "--time", action = "store_true",
@@ -119,9 +125,14 @@ if __name__ == "__main__":
                        metavar = ("lllon", "lllat", "urlon", "urlat"))
     args = parser.parse_args()
 
-    if args.label not in {None, "root", "leaf", "split", "merge", "all",
-                          "important"}:
-        args.label = int(args.label)
+    if args.label_type:
+        label = args.label_type
+    elif args.label_date:
+        label = ("date", args.label_date)
+    elif args.label_node:
+        label = ("node", args.label_node)
+    else:
+        label = None
 
     plt.figure()
 
@@ -153,7 +164,7 @@ if __name__ == "__main__":
             
         dest_crs = ccrs.PlateCarree((args.window[0] + args.window[2]) / 2)
         ax = plt.axes(projection = dest_crs)
-        plot_all_components(G, args.label)
+        plot_all_components(G, label)
     elif args.node is not None:
         if args.time:
             print("Reading edge list in current directory...")
@@ -176,7 +187,7 @@ if __name__ == "__main__":
             
         dest_crs = ccrs.PlateCarree(G.nodes[args.node]["coordinates"][0])
         ax = plt.axes(projection = dest_crs)
-        plot_nbunch(G, G.nodes[args.node]["component"], label = args.label)
+        plot_nbunch(G, G.nodes[args.node]["component"], label = label)
     else:
         if args.time:
             print("Reading edge lists in current directory...")
@@ -198,7 +209,7 @@ if __name__ == "__main__":
             print("Plotting...")
             
         ax = plt.axes(projection = ccrs.PlateCarree())
-        plot_all_components(G, args.label)
+        plot_all_components(G, label)
 
     ax.coastlines()
     ax.gridlines(draw_labels = True)
-- 
GitLab