modusa 0.3.72__py3-none-any.whl → 0.3.74__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.
modusa/tools/plotter.py CHANGED
@@ -95,6 +95,14 @@ class Fig:
95
95
 
96
96
  return curr_row
97
97
 
98
+ def _get_prev_row(self):
99
+ """
100
+ Get the prev row where you can add arrows.
101
+ """
102
+ prev_pow = self._axs[self._curr_row_idx - 1]
103
+
104
+ return prev_pow
105
+
98
106
  def _get_new_color(self):
99
107
  """
100
108
  Get a new color for different lines.
@@ -272,7 +280,7 @@ class Fig:
272
280
  curr_row[0].grid(True, linestyle='--', linewidth=0.7, color="lightgray" ,alpha=0.6)
273
281
 
274
282
 
275
- def add_matrix(self, M, y=None, x=None, c="gray_r", o="upper", label=None, ylabel=None, ylim=None, yticks=None, yticklabels=None, xticks=None, xticklabels=None, cbar=True, grid=True, ax=None):
283
+ def add_matrix(self, M, y=None, x=None, c="viridis", o="upper", label=None, ylabel=None, ylim=None, yticks=None, yticklabels=None, xticks=None, xticklabels=None, cbar=True, grid=True, ax=None):
276
284
  """
277
285
  Add matrix to the figure.
278
286
 
@@ -529,6 +537,53 @@ class Fig:
529
537
 
530
538
  if grid is True:
531
539
  curr_row[0].grid(True, linestyle='--', linewidth=0.7, color="lightgray" ,alpha=0.6)
540
+
541
+ from matplotlib.patches import Rectangle
542
+ import matplotlib.pyplot as plt
543
+
544
+ def add_arrow(self, xy, label, text_offset=(0, 0), c="r", fontsize=12, ax=None):
545
+ """
546
+ Add an arrow pointing to a specific point with a boxed label at the tail.
547
+
548
+ Parameters
549
+ ----------
550
+ xy : tuple[float, float]
551
+ - Target point (x, y) for the arrow head.
552
+ label : str
553
+ - Text label at the arrow tail.
554
+ text_offset : tuple[float, float]
555
+ - Offset (dx, dy) for label position from arrow tail.
556
+ c : str
557
+ - Color for arrow and text.
558
+ - Default: "r" for red
559
+ fontsize : int
560
+ - Font size of the label text.
561
+ - Default: 12
562
+ ax : int | None
563
+ - Which specific axis to plot (1, 2, 3, ...).
564
+ - If None, uses the current row.
565
+
566
+ Returns
567
+ -------
568
+ None
569
+ """
570
+ curr_row = self._get_prev_row() if ax is None else self._axs[ax]
571
+
572
+ arrowprops = dict(arrowstyle="->", color=c, lw=2)
573
+ bbox = dict(boxstyle="round,pad=0.3", fc="white", ec=c, lw=1.2)
574
+
575
+ text_x, text_y = xy[0] + text_offset[0], xy[1] + text_offset[1]
576
+
577
+ curr_row[0].annotate(
578
+ label,
579
+ xy=xy, xycoords="data",
580
+ xytext=(text_x, text_y), textcoords="data",
581
+ arrowprops=arrowprops,
582
+ fontsize=fontsize,
583
+ color=c,
584
+ ha="center", va="center",
585
+ bbox=bbox
586
+ )
532
587
 
533
588
  def add_legend(self, ypos=1.0):
534
589
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: modusa
3
- Version: 0.3.72
3
+ Version: 0.3.74
4
4
  Summary: A modular signal analysis python library.
5
5
  Author-Email: Ankit Anand <ankit0.anand0@gmail.com>
6
6
  License: MIT
@@ -1,7 +1,7 @@
1
- modusa-0.3.72.dist-info/METADATA,sha256=Hj2E34RK_GRREkK_BI8FZjmp4Q3YfuKea14dvVSVi_0,1436
2
- modusa-0.3.72.dist-info/WHEEL,sha256=9P2ygRxDrTJz3gsagc0Z96ukrxjr-LFBGOgv3AuKlCA,90
3
- modusa-0.3.72.dist-info/entry_points.txt,sha256=fmKpleVXj6CdaBVL14WoEy6xx7JQCs85jvzwTi3lePM,73
4
- modusa-0.3.72.dist-info/licenses/LICENSE.md,sha256=JTaXAjx5awk76VArKCx5dUW8vmLEWsL_ZlR7-umaHbA,1078
1
+ modusa-0.3.74.dist-info/METADATA,sha256=CoBn0MvvxeiFUbBHS7bALJWTBvOm4osnsFg7Uew2XEg,1436
2
+ modusa-0.3.74.dist-info/WHEEL,sha256=9P2ygRxDrTJz3gsagc0Z96ukrxjr-LFBGOgv3AuKlCA,90
3
+ modusa-0.3.74.dist-info/entry_points.txt,sha256=fmKpleVXj6CdaBVL14WoEy6xx7JQCs85jvzwTi3lePM,73
4
+ modusa-0.3.74.dist-info/licenses/LICENSE.md,sha256=JTaXAjx5awk76VArKCx5dUW8vmLEWsL_ZlR7-umaHbA,1078
5
5
  modusa/.DS_Store,sha256=_gm6qJREwfMi8dE7n5S89_RG46u5t3xHyD-smNhtNoM,6148
6
6
  modusa/__init__.py,sha256=RMIKAZZ27w1oh2UFMJvZQtQ-SluIQsac_3mSK_LaM30,277
7
7
  modusa/config.py,sha256=bTqK4t00FZqERVITrxW_q284aDDJAa9aMSfFknfR-oU,280
@@ -50,7 +50,7 @@ modusa/tools/audio_player.py,sha256=GP04TWW4jBwQBjANkfR_cJtEy7cIhvbu8RTwnf9hD6E,
50
50
  modusa/tools/audio_recorder.py,sha256=d2fVt0Sd2tlBdb2WlUs60K4N23zuxM3KUpQqX0ifPi8,2769
51
51
  modusa/tools/base.py,sha256=C0ESJ0mIfjjRlAkRbSetNtMoOfS6IrHBjexRp3l_Mh4,1293
52
52
  modusa/tools/math_ops.py,sha256=ZZ7U4DgqT7cOeE7_Lzi_Qq-48WYfwR9_osbZwTmE9eg,8690
53
- modusa/tools/plotter.py,sha256=NwyFMpLKNwiJ8wxYrX8wlaJKysMCGEXmPEq_jLnJinA,21557
53
+ modusa/tools/plotter.py,sha256=A_1GA-toJe6MjXiF8adfD9awE2EDQlTniEpy91yc4c8,22944
54
54
  modusa/tools/youtube_downloader.py,sha256=hB_X8-7nOHXOlxg6vv3wyhBLoAsWyomrULP6_uCQL7s,1698
55
55
  modusa/utils/.DS_Store,sha256=nLXMwF7QJNuglLI_Gk74F7vl5Dyus2Wd74Mgowijmdo,6148
56
56
  modusa/utils/__init__.py,sha256=1oLL20yLB1GL9IbFiZD8OReDqiCpFr-yetIR6x1cNkI,23
@@ -59,4 +59,4 @@ modusa/utils/excp.py,sha256=L9vhaGjKpv9viJYdmC9n5ndmk2GVbUBuFyZyhAQZmWY,906
59
59
  modusa/utils/logger.py,sha256=K0rsnObeNKCxlNeSnVnJeRhgfmob6riB2uyU7h3dDmA,571
60
60
  modusa/utils/np_func_cat.py,sha256=TyIFgRc6bARRMDnZxlVURO5Z0I-GWhxRONYyIv-Vwxs,1007
61
61
  modusa/utils/plot.py,sha256=s_vNdxvKfwxEngvJPgrF1PcmxZNnNaaXPViHWjyjJ-c,5335
62
- modusa-0.3.72.dist-info/RECORD,,
62
+ modusa-0.3.74.dist-info/RECORD,,