Source code for pygmt.params.frame

"""
The box parameter.
"""

from dataclasses import dataclass
from typing import Any

from pygmt.alias import Alias
from pygmt.params.base import BaseParam


@dataclass(repr=False)
class Axes(BaseParam):
    """
    Class for setting up the axes, title, and fill of a plot.

    Examples
    --------
    >>> from pygmt.params import Axes
    >>> str(Axes("WSen", title="My Plot Title", fill="lightred"))
    'WSen+glightred+tMy Plot Title'
    """

    axes: Any = None
    fill: Any = None
    title: Any = None

    @property
    def _aliases(self):
        return [
            Alias(self.axes),
            Alias(self.fill, prefix="+g"),
            Alias(self.title, prefix="+t"),
        ]


@dataclass(repr=False)
class Axis(BaseParam):
    """
    Class for setting up one axis of a plot.

    Examples
    --------
    >>> from pygmt.params import Axis
    >>> str(Axis(10, angle=30, label="X axis", unit="km"))
    '10+a30+lX axis+ukm'
    """

    interval: float | str
    angle: float | str | None = None
    label: str | None = None
    unit: str | None = None

    @property
    def _aliases(self):
        return [
            Alias(self.interval),
            Alias(self.angle, prefix="+a"),
            Alias(self.label, prefix="+l"),
            Alias(self.unit, prefix="+u"),
        ]


[docs] @dataclass(repr=False) class Frame(BaseParam): """ Class for setting up the frame of a plot. >>> from pygmt.alias import AliasSystem, Alias >>> from pygmt.params import Frame, Axes, Axis >>> frame = Frame( ... axes=Axes("WSen", title="My Plot Title", fill="lightred"), ... xaxis=Axis(10, angle=30, label="X axis", unit="km"), ... ) >>> def func(frame): ... alias = AliasSystem(B=Alias(frame)) ... return alias.kwdict >>> dict(func(frame)) {'B': ['WSen+glightred+tMy Plot Title', 'x10+a30+lX axis+ukm']} """ axes: Any = None xaxis: Any = None yaxis: Any = None zaxis: Any = None @property def _aliases(self): return [ Alias(self.axes), Alias(self.xaxis, prefix="x"), Alias(self.yaxis, prefix="y"), Alias(self.zaxis, prefix="z"), ] def __iter__(self): """ Iterate over the aliases of the class. Yields ------ The value of each alias in the class. None are excluded. """ yield from (alias._value for alias in self._aliases if alias._value is not None)