Skip to content

Commit 6580821

Browse files
committed
Add the Frame/Axes/Axis class for the frame parameter
1 parent 9f907ea commit 6580821

File tree

2 files changed

+94
-0
lines changed

2 files changed

+94
-0
lines changed

pygmt/params/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
"""
44

55
from pygmt.params.box import Box
6+
from pygmt.params.frame import Axes, Axis, Frame

pygmt/params/frame.py

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

0 commit comments

Comments
 (0)