risk-network 0.0.6b5__py3-none-any.whl → 0.0.6b7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- risk/__init__.py +1 -1
- risk/network/plot.py +207 -108
- {risk_network-0.0.6b5.dist-info → risk_network-0.0.6b7.dist-info}/METADATA +1 -1
- {risk_network-0.0.6b5.dist-info → risk_network-0.0.6b7.dist-info}/RECORD +7 -7
- {risk_network-0.0.6b5.dist-info → risk_network-0.0.6b7.dist-info}/LICENSE +0 -0
- {risk_network-0.0.6b5.dist-info → risk_network-0.0.6b7.dist-info}/WHEEL +0 -0
- {risk_network-0.0.6b5.dist-info → risk_network-0.0.6b7.dist-info}/top_level.txt +0 -0
risk/__init__.py
CHANGED
risk/network/plot.py
CHANGED
@@ -274,7 +274,7 @@ class NetworkPlotter:
|
|
274
274
|
|
275
275
|
def plot_subnetwork(
|
276
276
|
self,
|
277
|
-
nodes: List,
|
277
|
+
nodes: Union[List, Tuple, np.ndarray],
|
278
278
|
node_size: Union[int, np.ndarray] = 50,
|
279
279
|
node_shape: str = "o",
|
280
280
|
node_edgewidth: float = 1.0,
|
@@ -288,20 +288,24 @@ class NetworkPlotter:
|
|
288
288
|
"""Plot a subnetwork of selected nodes with customizable node and edge attributes.
|
289
289
|
|
290
290
|
Args:
|
291
|
-
nodes (list): List of node labels to include in the subnetwork.
|
291
|
+
nodes (list, tuple, or np.ndarray): List of node labels to include in the subnetwork. Accepts nested lists.
|
292
292
|
node_size (int or np.ndarray, optional): Size of the nodes. Can be a single integer or an array of sizes. Defaults to 50.
|
293
293
|
node_shape (str, optional): Shape of the nodes. Defaults to "o".
|
294
294
|
node_edgewidth (float, optional): Width of the node edges. Defaults to 1.0.
|
295
295
|
edge_width (float, optional): Width of the edges. Defaults to 1.0.
|
296
|
-
node_color (str, list, tuple, or np.ndarray, optional): Color of the nodes.
|
296
|
+
node_color (str, list, tuple, or np.ndarray, optional): Color of the nodes. Defaults to "white".
|
297
297
|
node_edgecolor (str, list, tuple, or np.ndarray, optional): Color of the node edges. Defaults to "black".
|
298
298
|
edge_color (str, list, tuple, or np.ndarray, optional): Color of the edges. Defaults to "black".
|
299
|
-
node_alpha (float, optional):
|
300
|
-
edge_alpha (float, optional):
|
299
|
+
node_alpha (float, optional): Transparency for the nodes. Defaults to 1.0.
|
300
|
+
edge_alpha (float, optional): Transparency for the edges. Defaults to 1.0.
|
301
301
|
|
302
302
|
Raises:
|
303
303
|
ValueError: If no valid nodes are found in the network graph.
|
304
304
|
"""
|
305
|
+
# Flatten nested lists of nodes, if necessary
|
306
|
+
if any(isinstance(item, (list, tuple, np.ndarray)) for item in nodes):
|
307
|
+
nodes = [node for sublist in nodes for node in sublist]
|
308
|
+
|
305
309
|
# Filter to get node IDs and their coordinates
|
306
310
|
node_ids = [
|
307
311
|
self.graph.node_label_to_id_map.get(node)
|
@@ -407,7 +411,7 @@ class NetworkPlotter:
|
|
407
411
|
|
408
412
|
def plot_subcontour(
|
409
413
|
self,
|
410
|
-
nodes: List,
|
414
|
+
nodes: Union[List, Tuple, np.ndarray],
|
411
415
|
levels: int = 5,
|
412
416
|
bandwidth: float = 0.8,
|
413
417
|
grid_size: int = 250,
|
@@ -417,10 +421,10 @@ class NetworkPlotter:
|
|
417
421
|
alpha: float = 1.0,
|
418
422
|
fill_alpha: float = 0.2,
|
419
423
|
) -> None:
|
420
|
-
"""Plot a subcontour for a given set of nodes using Kernel Density Estimation (KDE).
|
424
|
+
"""Plot a subcontour for a given set of nodes or a list of node sets using Kernel Density Estimation (KDE).
|
421
425
|
|
422
426
|
Args:
|
423
|
-
nodes (list): List of node labels to plot the contour for.
|
427
|
+
nodes (list, tuple, or np.ndarray): List of node labels or list of lists of node labels to plot the contour for.
|
424
428
|
levels (int, optional): Number of contour levels to plot. Defaults to 5.
|
425
429
|
bandwidth (float, optional): Bandwidth for KDE. Controls the smoothness of the contour. Defaults to 0.8.
|
426
430
|
grid_size (int, optional): Resolution of the grid for KDE. Higher values create finer contours. Defaults to 250.
|
@@ -433,33 +437,45 @@ class NetworkPlotter:
|
|
433
437
|
Raises:
|
434
438
|
ValueError: If no valid nodes are found in the network graph.
|
435
439
|
"""
|
436
|
-
#
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
if not node_ids or len(node_ids) == 1:
|
444
|
-
raise ValueError("No nodes found in the network graph or insufficient nodes to plot.")
|
440
|
+
# Check if nodes is a list of lists or a flat list
|
441
|
+
if any(isinstance(item, (list, tuple, np.ndarray)) for item in nodes):
|
442
|
+
# If it's a list of lists, iterate over sublists
|
443
|
+
node_groups = nodes
|
444
|
+
else:
|
445
|
+
# If it's a flat list of nodes, treat it as a single group
|
446
|
+
node_groups = [nodes]
|
445
447
|
|
446
448
|
# Convert color to RGBA using the _to_rgba helper function
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
449
|
+
color_rgba = _to_rgba(color, alpha)
|
450
|
+
|
451
|
+
# Iterate over each group of nodes (either sublists or flat list)
|
452
|
+
for sublist in node_groups:
|
453
|
+
# Filter to get node IDs and their coordinates for each sublist
|
454
|
+
node_ids = [
|
455
|
+
self.graph.node_label_to_id_map.get(node)
|
456
|
+
for node in sublist
|
457
|
+
if node in self.graph.node_label_to_id_map
|
458
|
+
]
|
459
|
+
if not node_ids or len(node_ids) == 1:
|
460
|
+
raise ValueError(
|
461
|
+
"No nodes found in the network graph or insufficient nodes to plot."
|
462
|
+
)
|
463
|
+
|
464
|
+
# Draw the KDE contour for the specified nodes
|
465
|
+
node_coordinates = self.graph.node_coordinates
|
466
|
+
self._draw_kde_contour(
|
467
|
+
self.ax,
|
468
|
+
node_coordinates,
|
469
|
+
node_ids,
|
470
|
+
color=color_rgba,
|
471
|
+
levels=levels,
|
472
|
+
bandwidth=bandwidth,
|
473
|
+
grid_size=grid_size,
|
474
|
+
linestyle=linestyle,
|
475
|
+
linewidth=linewidth,
|
476
|
+
alpha=alpha,
|
477
|
+
fill_alpha=fill_alpha,
|
478
|
+
)
|
463
479
|
|
464
480
|
def _draw_kde_contour(
|
465
481
|
self,
|
@@ -550,6 +566,7 @@ class NetworkPlotter:
|
|
550
566
|
fontcolor: Union[str, List, Tuple, np.ndarray] = "black",
|
551
567
|
fontalpha: float = 1.0,
|
552
568
|
arrow_linewidth: float = 1,
|
569
|
+
arrow_style: str = "->",
|
553
570
|
arrow_color: Union[str, List, Tuple, np.ndarray] = "black",
|
554
571
|
arrow_alpha: float = 1.0,
|
555
572
|
max_labels: Union[int, None] = None,
|
@@ -557,7 +574,10 @@ class NetworkPlotter:
|
|
557
574
|
min_words: int = 1,
|
558
575
|
max_word_length: int = 20,
|
559
576
|
min_word_length: int = 1,
|
560
|
-
words_to_omit: Union[List
|
577
|
+
words_to_omit: Union[List, None] = None,
|
578
|
+
overlay_ids: bool = False,
|
579
|
+
ids_to_keep: Union[List, Tuple, np.ndarray, None] = None,
|
580
|
+
ids_to_replace: Union[Dict, None] = None,
|
561
581
|
) -> None:
|
562
582
|
"""Annotate the network graph with labels for different domains, positioned around the network for clarity.
|
563
583
|
|
@@ -569,6 +589,7 @@ class NetworkPlotter:
|
|
569
589
|
fontcolor (str, list, tuple, or np.ndarray, optional): Color of the label text. Can be a string or RGBA array. Defaults to "black".
|
570
590
|
fontalpha (float, optional): Transparency level for the font color. Defaults to 1.0.
|
571
591
|
arrow_linewidth (float, optional): Line width of the arrows pointing to centroids. Defaults to 1.
|
592
|
+
arrow_style (str, optional): Style of the arrows pointing to centroids. Defaults to "->".
|
572
593
|
arrow_color (str, list, tuple, or np.ndarray, optional): Color of the arrows. Defaults to "black".
|
573
594
|
arrow_alpha (float, optional): Transparency level for the arrow color. Defaults to 1.0.
|
574
595
|
max_labels (int, optional): Maximum number of labels to plot. Defaults to None (no limit).
|
@@ -576,7 +597,16 @@ class NetworkPlotter:
|
|
576
597
|
min_words (int, optional): Minimum number of words required to display a label. Defaults to 1.
|
577
598
|
max_word_length (int, optional): Maximum number of characters in a word to display. Defaults to 20.
|
578
599
|
min_word_length (int, optional): Minimum number of characters in a word to display. Defaults to 1.
|
579
|
-
words_to_omit (List
|
600
|
+
words_to_omit (List, optional): List of words to omit from the labels. Defaults to None.
|
601
|
+
overlay_ids (bool, optional): Whether to overlay domain IDs in the center of the centroids. Defaults to False.
|
602
|
+
ids_to_keep (list, tuple, np.ndarray, or None, optional): IDs of domains that must be labeled. To discover domain IDs,
|
603
|
+
you can set `overlay_ids=True`. Defaults to None.
|
604
|
+
ids_to_replace (dict, optional): A dictionary mapping domain IDs to custom labels (strings). The labels should be space-separated words.
|
605
|
+
If provided, the custom labels will replace the default domain terms. To discover domain IDs, you can set `overlay_ids=True`.
|
606
|
+
Defaults to None.
|
607
|
+
|
608
|
+
Raises:
|
609
|
+
ValueError: If the number of provided `ids_to_keep` exceeds `max_labels`.
|
580
610
|
"""
|
581
611
|
# Log the plotting parameters
|
582
612
|
params.log_plotter(
|
@@ -589,6 +619,7 @@ class NetworkPlotter:
|
|
589
619
|
), # np.ndarray usually indicates custom colors
|
590
620
|
label_fontalpha=fontalpha,
|
591
621
|
label_arrow_linewidth=arrow_linewidth,
|
622
|
+
label_arrow_style=arrow_style,
|
592
623
|
label_arrow_color="custom" if isinstance(arrow_color, np.ndarray) else arrow_color,
|
593
624
|
label_arrow_alpha=arrow_alpha,
|
594
625
|
label_max_labels=max_labels,
|
@@ -597,9 +628,16 @@ class NetworkPlotter:
|
|
597
628
|
label_max_word_length=max_word_length,
|
598
629
|
label_min_word_length=min_word_length,
|
599
630
|
label_words_to_omit=words_to_omit,
|
631
|
+
label_overlay_ids=overlay_ids,
|
632
|
+
label_ids_to_keep=ids_to_keep,
|
633
|
+
label_ids_to_replace=ids_to_replace,
|
600
634
|
)
|
601
635
|
|
602
|
-
#
|
636
|
+
# Set max_labels to the total number of domains if not provided (None)
|
637
|
+
if max_labels is None:
|
638
|
+
max_labels = len(self.graph.domain_to_nodes_map)
|
639
|
+
|
640
|
+
# Convert colors to RGBA using the _to_rgba helper function
|
603
641
|
fontcolor = _to_rgba(fontcolor, fontalpha, num_repeats=len(self.graph.domain_to_nodes_map))
|
604
642
|
arrow_color = _to_rgba(
|
605
643
|
arrow_color, arrow_alpha, num_repeats=len(self.graph.domain_to_nodes_map)
|
@@ -615,55 +653,85 @@ class NetworkPlotter:
|
|
615
653
|
if nodes: # Skip if the domain has no nodes
|
616
654
|
domain_centroids[domain] = self._calculate_domain_centroid(nodes)
|
617
655
|
|
618
|
-
# Initialize
|
656
|
+
# Initialize dictionaries and lists for valid indices
|
619
657
|
valid_indices = []
|
620
658
|
filtered_domain_centroids = {}
|
621
659
|
filtered_domain_terms = {}
|
622
|
-
#
|
623
|
-
|
624
|
-
#
|
625
|
-
|
626
|
-
#
|
627
|
-
if
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
660
|
+
# Handle the ids_to_keep logic
|
661
|
+
if ids_to_keep:
|
662
|
+
# Convert ids_to_keep to remove accidental duplicates
|
663
|
+
ids_to_keep = set(ids_to_keep)
|
664
|
+
# Check if the number of provided ids_to_keep exceeds max_labels
|
665
|
+
if max_labels is not None and len(ids_to_keep) > max_labels:
|
666
|
+
raise ValueError(
|
667
|
+
f"Number of provided IDs ({len(ids_to_keep)}) exceeds max_labels ({max_labels})."
|
668
|
+
)
|
669
|
+
|
670
|
+
# Process the specified IDs first
|
671
|
+
for domain in ids_to_keep:
|
672
|
+
if domain in self.graph.trimmed_domain_to_term and domain in domain_centroids:
|
673
|
+
# Handle ids_to_replace logic here for ids_to_keep
|
674
|
+
if ids_to_replace and domain in ids_to_replace:
|
675
|
+
terms = ids_to_replace[domain].split(" ")
|
676
|
+
else:
|
677
|
+
terms = self.graph.trimmed_domain_to_term[domain].split(" ")
|
678
|
+
|
679
|
+
# Apply words_to_omit, word length constraints, and max_words
|
680
|
+
if words_to_omit:
|
681
|
+
terms = [term for term in terms if term.lower() not in words_to_omit]
|
682
|
+
terms = [
|
683
|
+
term for term in terms if min_word_length <= len(term) <= max_word_length
|
684
|
+
]
|
685
|
+
terms = terms[:max_words]
|
686
|
+
|
687
|
+
# Check if the domain passes the word count condition
|
688
|
+
if len(terms) >= min_words:
|
689
|
+
filtered_domain_centroids[domain] = domain_centroids[domain]
|
690
|
+
filtered_domain_terms[domain] = " ".join(terms)
|
691
|
+
valid_indices.append(
|
692
|
+
list(domain_centroids.keys()).index(domain)
|
693
|
+
) # Track the valid index
|
694
|
+
|
695
|
+
# Calculate remaining labels to plot after processing ids_to_keep
|
696
|
+
remaining_labels = (
|
697
|
+
max_labels - len(ids_to_keep) if ids_to_keep and max_labels else max_labels
|
698
|
+
)
|
699
|
+
# Process remaining domains to fill in additional labels, if there are slots left
|
700
|
+
if remaining_labels and remaining_labels > 0:
|
701
|
+
for idx, (domain, centroid) in enumerate(domain_centroids.items()):
|
702
|
+
if ids_to_keep and domain in ids_to_keep:
|
703
|
+
continue # Skip domains already handled by ids_to_keep
|
704
|
+
|
705
|
+
# Handle ids_to_replace logic first
|
706
|
+
if ids_to_replace and domain in ids_to_replace:
|
707
|
+
terms = ids_to_replace[domain].split(" ")
|
708
|
+
else:
|
709
|
+
terms = self.graph.trimmed_domain_to_term[domain].split(" ")
|
710
|
+
|
711
|
+
# Apply words_to_omit, word length constraints, and max_words
|
712
|
+
if words_to_omit:
|
713
|
+
terms = [term for term in terms if term.lower() not in words_to_omit]
|
714
|
+
|
715
|
+
terms = [term for term in terms if min_word_length <= len(term) <= max_word_length]
|
716
|
+
terms = terms[:max_words]
|
717
|
+
# Check if the domain passes the word count condition
|
718
|
+
if len(terms) >= min_words:
|
719
|
+
filtered_domain_centroids[domain] = centroid
|
720
|
+
filtered_domain_terms[domain] = " ".join(terms)
|
721
|
+
valid_indices.append(idx) # Track the valid index
|
722
|
+
|
723
|
+
# Stop once we've reached the max_labels limit
|
724
|
+
if len(filtered_domain_centroids) >= max_labels:
|
725
|
+
break
|
659
726
|
|
660
727
|
# Calculate the bounding box around the network
|
661
728
|
center, radius = _calculate_bounding_box(self.graph.node_coordinates, radius_margin=scale)
|
662
|
-
# Calculate the best positions for labels
|
729
|
+
# Calculate the best positions for labels
|
663
730
|
best_label_positions = _calculate_best_label_positions(
|
664
731
|
filtered_domain_centroids, center, radius, offset
|
665
732
|
)
|
666
|
-
|
733
|
+
|
734
|
+
# Annotate the network with labels
|
667
735
|
for idx, (domain, pos) in zip(valid_indices, best_label_positions.items()):
|
668
736
|
centroid = filtered_domain_centroids[domain]
|
669
737
|
annotations = filtered_domain_terms[domain].split(" ")[:max_words]
|
@@ -677,12 +745,27 @@ class NetworkPlotter:
|
|
677
745
|
fontsize=fontsize,
|
678
746
|
fontname=font,
|
679
747
|
color=fontcolor[idx],
|
680
|
-
arrowprops=dict(
|
748
|
+
arrowprops=dict(
|
749
|
+
arrowstyle=arrow_style, color=arrow_color[idx], linewidth=arrow_linewidth
|
750
|
+
),
|
681
751
|
)
|
752
|
+
# Overlay domain ID at the centroid if requested
|
753
|
+
if overlay_ids:
|
754
|
+
self.ax.text(
|
755
|
+
centroid[0],
|
756
|
+
centroid[1],
|
757
|
+
domain,
|
758
|
+
ha="center",
|
759
|
+
va="center",
|
760
|
+
fontsize=fontsize,
|
761
|
+
fontname=font,
|
762
|
+
color=fontcolor[idx],
|
763
|
+
alpha=fontalpha,
|
764
|
+
)
|
682
765
|
|
683
766
|
def plot_sublabel(
|
684
767
|
self,
|
685
|
-
nodes: List,
|
768
|
+
nodes: Union[List, Tuple, np.ndarray],
|
686
769
|
label: str,
|
687
770
|
radial_position: float = 0.0,
|
688
771
|
scale: float = 1.05,
|
@@ -692,13 +775,14 @@ class NetworkPlotter:
|
|
692
775
|
fontcolor: Union[str, List, Tuple, np.ndarray] = "black",
|
693
776
|
fontalpha: float = 1.0,
|
694
777
|
arrow_linewidth: float = 1,
|
778
|
+
arrow_style: str = "->",
|
695
779
|
arrow_color: Union[str, List, Tuple, np.ndarray] = "black",
|
696
780
|
arrow_alpha: float = 1.0,
|
697
781
|
) -> None:
|
698
|
-
"""Annotate the network graph with a
|
782
|
+
"""Annotate the network graph with a label for the given nodes, with one arrow pointing to each centroid of sublists of nodes.
|
699
783
|
|
700
784
|
Args:
|
701
|
-
nodes (
|
785
|
+
nodes (list, tuple, or np.ndarray): List of node labels or list of lists of node labels.
|
702
786
|
label (str): The label to be annotated on the network.
|
703
787
|
radial_position (float, optional): Radial angle for positioning the label, in degrees (0-360). Defaults to 0.0.
|
704
788
|
scale (float, optional): Scale factor for positioning the label around the perimeter. Defaults to 1.05.
|
@@ -708,24 +792,22 @@ class NetworkPlotter:
|
|
708
792
|
fontcolor (str, list, tuple, or np.ndarray, optional): Color of the label text. Defaults to "black".
|
709
793
|
fontalpha (float, optional): Transparency level for the font color. Defaults to 1.0.
|
710
794
|
arrow_linewidth (float, optional): Line width of the arrow pointing to the centroid. Defaults to 1.
|
795
|
+
arrow_style (str, optional): Style of the arrows pointing to the centroid. Defaults to "->".
|
711
796
|
arrow_color (str, list, tuple, or np.ndarray, optional): Color of the arrow. Defaults to "black".
|
712
797
|
arrow_alpha (float, optional): Transparency level for the arrow color. Defaults to 1.0.
|
713
798
|
"""
|
714
|
-
#
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
arrow_color = _to_rgba(arrow_color, arrow_alpha)
|
727
|
-
# Calculate the centroid of the provided nodes
|
728
|
-
centroid = self._calculate_domain_centroid(node_ids)
|
799
|
+
# Check if nodes is a list of lists or a flat list
|
800
|
+
if any(isinstance(item, (list, tuple, np.ndarray)) for item in nodes):
|
801
|
+
# If it's a list of lists, iterate over sublists
|
802
|
+
node_groups = nodes
|
803
|
+
else:
|
804
|
+
# If it's a flat list of nodes, treat it as a single group
|
805
|
+
node_groups = [nodes]
|
806
|
+
|
807
|
+
# Convert fontcolor and arrow_color to RGBA
|
808
|
+
fontcolor_rgba = _to_rgba(fontcolor, fontalpha)
|
809
|
+
arrow_color_rgba = _to_rgba(arrow_color, arrow_alpha)
|
810
|
+
|
729
811
|
# Calculate the bounding box around the network
|
730
812
|
center, radius = _calculate_bounding_box(self.graph.node_coordinates, radius_margin=scale)
|
731
813
|
# Convert radial position to radians, adjusting for a 90-degree rotation
|
@@ -735,19 +817,36 @@ class NetworkPlotter:
|
|
735
817
|
center[1] + (radius + offset) * np.sin(radial_radians),
|
736
818
|
)
|
737
819
|
|
738
|
-
#
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
820
|
+
# Iterate over each group of nodes (either sublists or flat list)
|
821
|
+
for sublist in node_groups:
|
822
|
+
# Map node labels to IDs
|
823
|
+
node_ids = [
|
824
|
+
self.graph.node_label_to_id_map.get(node)
|
825
|
+
for node in sublist
|
826
|
+
if node in self.graph.node_label_to_id_map
|
827
|
+
]
|
828
|
+
if not node_ids or len(node_ids) == 1:
|
829
|
+
raise ValueError(
|
830
|
+
"No nodes found in the network graph or insufficient nodes to plot."
|
831
|
+
)
|
832
|
+
|
833
|
+
# Calculate the centroid of the provided nodes in this sublist
|
834
|
+
centroid = self._calculate_domain_centroid(node_ids)
|
835
|
+
# Annotate the network with the label and an arrow pointing to each centroid
|
836
|
+
self.ax.annotate(
|
837
|
+
label,
|
838
|
+
xy=centroid,
|
839
|
+
xytext=label_position,
|
840
|
+
textcoords="data",
|
841
|
+
ha="center",
|
842
|
+
va="center",
|
843
|
+
fontsize=fontsize,
|
844
|
+
fontname=font,
|
845
|
+
color=fontcolor_rgba,
|
846
|
+
arrowprops=dict(
|
847
|
+
arrowstyle=arrow_style, color=arrow_color_rgba, linewidth=arrow_linewidth
|
848
|
+
),
|
849
|
+
)
|
751
850
|
|
752
851
|
def _calculate_domain_centroid(self, nodes: List) -> tuple:
|
753
852
|
"""Calculate the most centrally located node in .
|
@@ -1,4 +1,4 @@
|
|
1
|
-
risk/__init__.py,sha256=
|
1
|
+
risk/__init__.py,sha256=DLDQBVlM5oYOp-S9i1GDq-rRwaNv1dutx241xcHbK3w,112
|
2
2
|
risk/constants.py,sha256=XInRaH78Slnw_sWgAsBFbUHkyA0h0jL0DKGuQNbOvjM,550
|
3
3
|
risk/risk.py,sha256=PONl5tzN5DSVUf4MgczfOvzGV-5JoAOLTQ6YWl10mZ8,20697
|
4
4
|
risk/annotations/__init__.py,sha256=vUpVvMRE5if01Ic8QY6M2Ae3EFGJHdugEe9PdEkAW4Y,138
|
@@ -15,7 +15,7 @@ risk/network/__init__.py,sha256=iEPeJdZfqp0toxtbElryB8jbz9_t_k4QQ3iDvKE8C_0,126
|
|
15
15
|
risk/network/geometry.py,sha256=H1yGVVqgbfpzBzJwEheDLfvGLSA284jGQQTn612L4Vc,6759
|
16
16
|
risk/network/graph.py,sha256=scPFQIJjioup1FjQLyxNrAB17RmskY9MmvoFHrMlqNI,13135
|
17
17
|
risk/network/io.py,sha256=gG50kOknO-D3HkW1HsbHMkTMvjUtn3l4W4Jwd-rXNr8,21202
|
18
|
-
risk/network/plot.py,sha256=
|
18
|
+
risk/network/plot.py,sha256=4zcFJWZgGrj7AG1crRuwGpzzjjHXjQ8Eh5VjlkOQblE,60747
|
19
19
|
risk/stats/__init__.py,sha256=e-BE_Dr_jgiK6hKM-T-tlG4yvHnId8e5qjnM0pdwNVc,230
|
20
20
|
risk/stats/fisher_exact.py,sha256=-bPwzu76-ob0HzrTV20mXUTot7v-MLuqFaAoab-QxPg,4966
|
21
21
|
risk/stats/hypergeom.py,sha256=lrIFdhCWRjvM4apYw1MlOKqT_IY5OjtCwrjdtJdt6Tg,4954
|
@@ -23,8 +23,8 @@ risk/stats/stats.py,sha256=kvShov-94W6ffgDUTb522vB9hDJQSyTsYif_UIaFfSM,7059
|
|
23
23
|
risk/stats/permutation/__init__.py,sha256=neJp7FENC-zg_CGOXqv-iIvz1r5XUKI9Ruxhmq7kDOI,105
|
24
24
|
risk/stats/permutation/permutation.py,sha256=qLWdwxEY6nmkYPxpM8HLDcd2mbqYv9Qr7CKtJvhLqIM,9220
|
25
25
|
risk/stats/permutation/test_functions.py,sha256=HuDIM-V1jkkfE1rlaIqrWWBSKZt3dQ1f-YEDjWpnLSE,2343
|
26
|
-
risk_network-0.0.
|
27
|
-
risk_network-0.0.
|
28
|
-
risk_network-0.0.
|
29
|
-
risk_network-0.0.
|
30
|
-
risk_network-0.0.
|
26
|
+
risk_network-0.0.6b7.dist-info/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
|
27
|
+
risk_network-0.0.6b7.dist-info/METADATA,sha256=yiCOKKWr1cByfyrssz1g0LLSYLfvUr7XziphQPe2IkA,43142
|
28
|
+
risk_network-0.0.6b7.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
|
29
|
+
risk_network-0.0.6b7.dist-info/top_level.txt,sha256=NX7C2PFKTvC1JhVKv14DFlFAIFnKc6Lpsu1ZfxvQwVw,5
|
30
|
+
risk_network-0.0.6b7.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|