Source code for fastpyxl.chart.scatter_chart

# Copyright (c) 2010-2024 fastpyxl

from __future__ import annotations

from fastpyxl.typed_serialisable.errors import FieldValidationError
from fastpyxl.typed_serialisable.fields import AliasField, Field

from fastpyxl.descriptors.excel import ExtensionList

from ._chart import ChartBase
from .axis import NumericAxis
from .series import XYSeries
from .label import DataLabelList


def _scatter_style(v):
    if v is None or v == "none":
        return None
    allowed = frozenset({"line", "lineMarker", "marker", "smooth", "smoothMarker"})
    if v not in allowed:
        raise FieldValidationError(f"scatterStyle rejected value {v!r}")
    return v


[docs] class ScatterChart(ChartBase): tagname = "scatterChart" scatterStyle: str | None = Field.nested_value( expected_type=str, allow_none=True, converter=_scatter_style, default=None, ) varyColors: bool | None = Field.nested_bool(allow_none=True, default=None) ser: list[XYSeries] | None = Field.sequence(expected_type=XYSeries, allow_none=True, default=list) dLbls: DataLabelList | None = Field.element( expected_type=DataLabelList, allow_none=True, default=None ) dataLabels = AliasField("dLbls", default=None) extLst: ExtensionList | None = Field.element( expected_type=ExtensionList, allow_none=True, serialize=False, default=None ) _series_type = "scatter" xml_order = ("scatterStyle", "varyColors", "ser", "dLbls", "axId") def __init__( self, scatterStyle=None, varyColors=None, ser=(), dLbls=None, extLst=None, **kw, ): self.scatterStyle = scatterStyle self.varyColors = varyColors self.ser = list(ser) if ser is not None else [] self.dLbls = dLbls self.extLst = extLst self.x_axis = NumericAxis(axId=10, crossAx=20) self.y_axis = NumericAxis(axId=20, crossAx=10) super().__init__(**kw)