Skip to content

Commit 351e28b

Browse files
committed
Add the Axes, Axis, Frame classes for the frame parameter
1 parent 926a690 commit 351e28b

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed

pygmt/params/frame.py

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
"""
2+
The frame parameter.
3+
"""
4+
5+
from dataclasses import dataclass
6+
from typing import Any
7+
8+
from pygmt.alias import Alias
9+
from pygmt.params.base import BaseParam
10+
11+
12+
@dataclass(repr=False)
13+
class Axes(BaseParam):
14+
"""
15+
Class for setting up the axes, title, and fill of a plot.
16+
17+
Examples
18+
--------
19+
>>> from pygmt.params import Axes
20+
>>> str(Axes("WSen", title="My Plot Title", fill="lightred"))
21+
'WSen+glightred+tMy Plot Title'
22+
"""
23+
24+
axes: Any = None
25+
fill: Any = None
26+
title: Any = None
27+
28+
@property
29+
def _aliases(self):
30+
return [
31+
Alias(self.axes),
32+
Alias(self.fill, prefix="+g"),
33+
Alias(self.title, prefix="+t"),
34+
]
35+
36+
37+
@dataclass(repr=False)
38+
class Axis(BaseParam):
39+
"""
40+
Class for setting up one axis of a plot.
41+
42+
Examples
43+
--------
44+
>>> from pygmt.params import Axis
45+
>>> str(Axis(10, angle=30, label="X axis", unit="km"))
46+
'10+a30+lX axis+ukm'
47+
"""
48+
49+
interval: float | str
50+
angle: float | str | None = None
51+
label: str | None = None
52+
unit: str | None = None
53+
54+
@property
55+
def _aliases(self):
56+
return [
57+
Alias(self.interval),
58+
Alias(self.angle, prefix="+a"),
59+
Alias(self.label, prefix="+l"),
60+
Alias(self.unit, prefix="+u"),
61+
]
62+
63+
64+
@dataclass(repr=False)
65+
class Frame(BaseParam):
66+
"""
67+
Class for setting up the frame of a plot.
68+
69+
>>> from pygmt.alias import AliasSystem, Alias
70+
>>> from pygmt.params import Frame, Axes, Axis
71+
>>> frame = Frame(
72+
... axes=Axes("WSen", title="My Plot Title", fill="lightred"),
73+
... xaxis=Axis(10, angle=30, label="X axis", unit="km"),
74+
... )
75+
>>> def func(frame):
76+
... alias = AliasSystem(B=Alias(frame))
77+
... return alias.kwdict
78+
>>> dict(func(frame))
79+
{'B': ['WSen+glightred+tMy Plot Title', 'x10+a30+lX axis+ukm']}
80+
"""
81+
82+
axes: Any = None
83+
xaxis: Any = None
84+
yaxis: Any = None
85+
zaxis: Any = None
86+
87+
@property
88+
def _aliases(self):
89+
return [
90+
Alias(self.axes),
91+
Alias(self.xaxis, prefix="x"),
92+
Alias(self.yaxis, prefix="y"),
93+
Alias(self.zaxis, prefix="z"),
94+
]
95+
96+
def __iter__(self):
97+
"""
98+
Iterate over the aliases of the class.
99+
100+
Yields
101+
------
102+
The value of each alias in the class. None are excluded.
103+
"""
104+
yield from (alias._value for alias in self._aliases if alias._value is not None)

0 commit comments

Comments
 (0)