Source code for lightningchart.series.ellipse_series
from __future__ import annotations
from typing import Optional
import uuid
from lightningchart.series import FigureSeries, SeriesWithAddEventListener, SeriesWithClear, SeriesWithCursor, SeriesWithDrawOrder, SeriesWithXYAxes
from lightningchart.ui.axis import Axis
from lightningchart.utils import convert_color_to_hex
from lightningchart.utils.utils import ColorInput, LegendOptions, build_series_legend_options
[docs]
class EllipseSeries(
SeriesWithClear,
SeriesWithDrawOrder,
FigureSeries,
SeriesWithAddEventListener,
SeriesWithXYAxes,
SeriesWithCursor,
):
"""Series for visualizing ellipses in a 2D space."""
def __init__(
self,
chart,
automatic_color_index: int = None,
axis_x: Axis = None,
axis_y: Axis = None,
legend: Optional[LegendOptions] = None,
):
super().__init__(chart, axis_x, axis_y)
legend_options = build_series_legend_options(legend)
self.instance.send(
self.id,
'addEllipseSeries',
{
'chart': self.chart.id,
'automaticColorIndex': automatic_color_index,
'axisX': axis_x,
'axisY': axis_y,
'legend': legend_options if legend_options else None,
},
)
[docs]
def add(
self,
x: int | float,
y: int | float,
radius_x: int | float,
radius_y: int | float,
):
"""Add new figure to the series.
Args:
x: x-axis coordinate.
y: y-axis coordinate.
radius_x: x-axis radius.
radius_y: y-axis radius.
Returns:
The instance of the class for fluent interface.
"""
ellipse_figure = EllipseFigure(self, {'x': x, 'y': y, 'radiusX': radius_x, 'radiusY': radius_y})
return ellipse_figure
[docs]
def set_animation_highlight(self, enabled: bool):
"""Set component highlight animations enabled or not.
Args:
enabled: Boolean flag.
Returns:
The instance of the class for fluent interface.
"""
self.instance.send(self.id, 'setAnimationHighlight', {'enabled': enabled})
return self
[docs]
def set_auto_scrolling_enabled(self, enabled: bool):
"""Set whether series is taken into account with automatic scrolling and fitting of attached axes.
Args:
enabled: Boolean flag.
Returns:
The instance of the class for fluent interface.
"""
self.instance.send(self.id, 'setAutoScrollingEnabled', {'enabled': enabled})
return self
[docs]
class EllipseFigure:
"""Class representing a visual ellipse figure in the EllipseSeries."""
def __init__(self, series: EllipseSeries, dimensions: dict):
self.series = series
self.dimensions = dimensions
self.instance = series.instance
self.id = str(uuid.uuid4())
self.instance.send(
self.id,
'addEllipseFigure',
{'series': self.series.id, 'dimensions': dimensions},
)
[docs]
def set_stroke(self, thickness: int | float, color: ColorInput | None = None):
"""Set Stroke style of the ellipse
Args:
thickness (int | float): Thickness of the stroke.
color (Color): Color of the stroke. Use 'transparent' or None to hide.
Returns:
The instance of the class for fluent interface.
"""
color = convert_color_to_hex(color) if color is not None else None
self.instance.send(
self.id,
'setStrokeStyle',
{'thickness': thickness, 'color': color},
)
return self
[docs]
def set_visible(self, visible: bool):
"""Set element visibility.
Args:
visible: Boolean flag.
Returns:
The instance of the class for fluent interface.
"""
self.instance.send(self.id, 'setVisible', {'visible': visible})
return self
[docs]
def set_dimensions(
self,
x: int | float,
y: int | float,
radius_x: int | float,
radius_y: int | float,
):
"""Set new dimensions for figure.
Args:
x: x coordinate.
y: y coordinate.
radius_x: x radius.
radius_y: y radius.
Returns:
The instance of the class for fluent interface.
"""
self.instance.send(
self.id,
'setDimensionsEllipse',
{'x': x, 'y': y, 'radiusX': radius_x, 'radiusY': radius_y},
)
return self
[docs]
def set_color(self, color: ColorInput | None):
"""Set a color of the ellipse figure.
Args:
color (Color): Color of the ellipse. Use 'transparent' or None to hide.
Returns:
The instance of the class for fluent interface.
"""
color = convert_color_to_hex(color) if color is not None else None
self.instance.send(self.id, 'setSolidFillStyle', {'color': color})
return self