Skip to content

Commit 75eade0

Browse files
committed
Add annotated range selection items: AnnotatedXRangeSelection and AnnotatedYRangeSelection
1 parent 3f5b314 commit 75eade0

File tree

12 files changed

+385
-3
lines changed

12 files changed

+385
-3
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414
* X and Y range selection items:
1515
* Added support for item title in parameters data set (`RangeShapeParam`)
1616
* This concerns the `XRangeSelection` and `YRangeSelection` items
17+
* New annotated X and Y range selection items:
18+
* Added `AnnotatedXRangeSelection` and `AnnotatedYRangeSelection` items
19+
* These items provide X and Y range selection with an annotation label
20+
* They can be created using `make.annotated_xrange` and `make.annotated_yrange` functions
1721

1822
🧹 API cleanup: removed deprecated update methods (use `update_item` instead)
1923

doc/features/items/overview.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ The following annotation items are available:
7272

7373
* :py:class:`.AnnotatedPoint`
7474
* :py:class:`.AnnotatedSegment`
75+
* :py:class:`.AnnotatedXRangeSelection`
76+
* :py:class:`.AnnotatedYRangeSelection`
7577
* :py:class:`.AnnotatedRectangle`
7678
* :py:class:`.AnnotatedObliqueRectangle`
7779
* :py:class:`.AnnotatedEllipse`

doc/features/items/reference.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ Annotations
118118
:members:
119119
.. autoclass:: plotpy.items.AnnotatedSegment
120120
:members:
121+
.. autoclass:: plotpy.items.AnnotatedXRangeSelection
122+
:members:
123+
.. autoclass:: plotpy.items.AnnotatedYRangeSelection
124+
:members:
121125
.. autoclass:: plotpy.items.AnnotatedRectangle
122126
:members:
123127
.. autoclass:: plotpy.items.AnnotatedObliqueRectangle

plotpy/builder/annotation.py

Lines changed: 107 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
AnnotatedPolygon,
3131
AnnotatedRectangle,
3232
AnnotatedSegment,
33+
AnnotatedXRangeSelection,
34+
AnnotatedYRangeSelection,
3335
)
3436
from plotpy.styles import AnnotationParam
3537

@@ -138,6 +140,8 @@ def __annotated_shape(
138140
transform_matrix,
139141
readonly,
140142
private,
143+
section: str = "plot",
144+
option: str = "shape/drag",
141145
):
142146
param = self.__get_annotationparam(
143147
title=title,
@@ -155,7 +159,7 @@ def __annotated_shape(
155159
shape = shapeclass(points, annotationparam=param)
156160
else:
157161
shape = shapeclass(*points, annotationparam=param)
158-
shape.set_style("plot", "shape/drag")
162+
shape.set_style(section, option)
159163
return shape
160164

161165
def annotated_rectangle(
@@ -385,6 +389,108 @@ def annotated_segment(
385389
private,
386390
)
387391

392+
def annotated_xrange(
393+
self,
394+
x0: float,
395+
x1: float,
396+
title: str | None = None,
397+
subtitle: str | None = None,
398+
show_label: bool | None = None,
399+
show_computations: bool | None = None,
400+
show_subtitle: bool | None = None,
401+
format: str | None = None,
402+
uncertainty: float | None = None,
403+
transform_matrix: np.ndarray | None = None,
404+
readonly: bool | None = None,
405+
private: bool | None = None,
406+
) -> AnnotatedXRangeSelection:
407+
"""Make an annotated x-range selection `plot item`
408+
409+
Args:
410+
x0: lower x coordinate
411+
x1: upper x coordinate
412+
title: label name. Default is None
413+
subtitle: label subtitle. Default is None
414+
show_label: show label. Default is None
415+
show_computations: show computations. Default is None
416+
show_subtitle: show subtitle. Default is None
417+
format: string formatting. Default is None
418+
uncertainty: measurement relative uncertainty. Default is None
419+
transform_matrix: transform matrix. Default is None
420+
readonly: readonly. Default is None
421+
private: private. Default is None
422+
423+
Returns:
424+
:py:class:`.AnnotatedXRangeSelection` object
425+
"""
426+
return self.__annotated_shape(
427+
AnnotatedXRangeSelection,
428+
(x0, x1),
429+
title,
430+
subtitle,
431+
show_label,
432+
show_computations,
433+
show_subtitle,
434+
format,
435+
uncertainty,
436+
transform_matrix,
437+
readonly,
438+
private,
439+
section="plot",
440+
option="range",
441+
)
442+
443+
def annotated_yrange(
444+
self,
445+
y0: float,
446+
y1: float,
447+
title: str | None = None,
448+
subtitle: str | None = None,
449+
show_label: bool | None = None,
450+
show_computations: bool | None = None,
451+
show_subtitle: bool | None = None,
452+
format: str | None = None,
453+
uncertainty: float | None = None,
454+
transform_matrix: np.ndarray | None = None,
455+
readonly: bool | None = None,
456+
private: bool | None = None,
457+
) -> AnnotatedYRangeSelection:
458+
"""Make an annotated y-range selection `plot item`
459+
460+
Args:
461+
y0: lower y coordinate
462+
y1: upper y coordinate
463+
title: label name. Default is None
464+
subtitle: label subtitle. Default is None
465+
show_label: show label. Default is None
466+
show_computations: show computations. Default is None
467+
show_subtitle: show subtitle. Default is None
468+
format: string formatting. Default is None
469+
uncertainty: measurement relative uncertainty. Default is None
470+
transform_matrix: transform matrix. Default is None
471+
readonly: readonly. Default is None
472+
private: private. Default is None
473+
474+
Returns:
475+
:py:class:`.AnnotatedYRangeSelection` object
476+
"""
477+
return self.__annotated_shape(
478+
AnnotatedYRangeSelection,
479+
(y0, y1),
480+
title,
481+
subtitle,
482+
show_label,
483+
show_computations,
484+
show_subtitle,
485+
format,
486+
uncertainty,
487+
transform_matrix,
488+
readonly,
489+
private,
490+
section="plot",
491+
option="range",
492+
)
493+
388494
def annotated_polygon(
389495
self,
390496
points: np.ndarray,

plotpy/config.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,25 @@ def get_plotpy_defaults() -> dict[str, int | float | str | bool]:
513513
"shape/label/bgalpha": 0.25,
514514
"shape/label/abspos": False,
515515
"shape/label/move_anchor": True,
516+
"range/line/style": "SolidLine",
517+
"range/line/color": "#93ffdb",
518+
"range/line/width": 1.0,
519+
"range/sel_line/style": "SolidLine",
520+
"range/sel_line/color": "#33ffdb",
521+
"range/sel_line/width": 2.0,
522+
"range/fill": "#33ffdb",
523+
"range/shade": 0.1,
524+
"range/symbol/marker": "Ellipse",
525+
"range/symbol/size": 7,
526+
"range/symbol/edgecolor": "#93ffdb",
527+
"range/symbol/facecolor": "#93ffdb",
528+
"range/symbol/alpha": 1.0,
529+
"range/sel_symbol/marker": "Ellipse",
530+
"range/sel_symbol/size": 9,
531+
"range/sel_symbol/edgecolor": "#33ffdb",
532+
"range/sel_symbol/facecolor": "#33ffdb",
533+
"range/sel_symbol/alpha": 0.9,
534+
"range/multi/color": "#806060",
516535
"label/symbol/marker": "NoSymbol",
517536
"label/symbol/size": 0,
518537
"label/symbol/edgecolor": MAIN_BG_COLOR,
File renamed without changes.
File renamed without changes.

plotpy/io.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,8 @@ def register_serializable_items(modname, classnames):
616616
"Axes",
617617
"AnnotatedPoint",
618618
"AnnotatedSegment",
619+
"AnnotatedXRangeSelection",
620+
"AnnotatedYRangeSelection",
619621
"AnnotatedRectangle",
620622
"AnnotatedObliqueRectangle",
621623
"AnnotatedEllipse",

plotpy/items/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
AnnotatedRectangle,
1212
AnnotatedPolygon,
1313
AnnotatedSegment,
14+
AnnotatedXRangeSelection,
15+
AnnotatedYRangeSelection,
1416
AnnotatedShape,
1517
)
1618
from .contour import ContourItem, create_contour_items

0 commit comments

Comments
 (0)