Skip to content

Commit 7a276b0

Browse files
committed
Add Figure.scalebar to plot a scale bar on maps
1 parent 170f82e commit 7a276b0

File tree

3 files changed

+91
-0
lines changed

3 files changed

+91
-0
lines changed

pygmt/figure.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,7 @@ def _repr_html_(self) -> str:
449449
plot3d,
450450
psconvert,
451451
rose,
452+
scalebar,
452453
set_panel,
453454
shift_origin,
454455
solar,

pygmt/src/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
from pygmt.src.project import project
4444
from pygmt.src.psconvert import psconvert
4545
from pygmt.src.rose import rose
46+
from pygmt.src.scalebar import scalebar
4647
from pygmt.src.select import select
4748
from pygmt.src.shift_origin import shift_origin
4849
from pygmt.src.solar import solar

pygmt/src/scalebar.py

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
"""
2+
scalebar - Add a scale bar.
3+
"""
4+
5+
from collections.abc import Sequence
6+
from typing import Literal
7+
8+
from pygmt._typing import AnchorCode
9+
from pygmt.alias import Alias, AliasSystem
10+
from pygmt.clib import Session
11+
from pygmt.helpers import build_arg_list
12+
13+
14+
def scalebar( # noqa: PLR0913
15+
self,
16+
position,
17+
length,
18+
position_type: Literal["user", "justify", "mirror", "normalize", "plot"]
19+
| None = None,
20+
label_alignment: Literal["left", "right", "top", "bottom"] | None = None,
21+
scale_position=None,
22+
justify: AnchorCode | None = None,
23+
offset: Sequence[float | str] | None = None,
24+
label: str | bool = False,
25+
fancy: bool = False,
26+
unit: bool = False,
27+
vertical: bool = False,
28+
box=None,
29+
):
30+
"""
31+
Add a scale bar.
32+
33+
Parameters
34+
----------
35+
TODO
36+
37+
Examples
38+
--------
39+
>>> import pygmt
40+
>>> from pygmt.params import Box
41+
>>> fig = pygmt.Figure()
42+
>>> fig.basemap(region=[0, 80, -30, 30], projection="M10c", frame=True)
43+
>>> fig.scalebar(
44+
... position=(10, 10),
45+
... position_type="g",
46+
... length=1000,
47+
... fancy=True,
48+
... label="Scale",
49+
... unit=True,
50+
... box=Box(pen=0.5, fill="lightblue"),
51+
... )
52+
>>> fig.show()
53+
"""
54+
self._preprocess()
55+
56+
aliasdict = AliasSystem(
57+
L=[
58+
Alias(
59+
position_type,
60+
name="position_type",
61+
mapping={
62+
"user": "g",
63+
"justify": "j",
64+
"mirror": "J",
65+
"normalize": "n",
66+
"plot": "x",
67+
},
68+
),
69+
Alias(position, name="position", separator="/"),
70+
Alias(length, name="length", prefix="+w"),
71+
Alias(
72+
label_alignment,
73+
name="label_alignment",
74+
prefix="+a",
75+
mapping={"left": "l", "right": "r", "top": "t", "bottom": "b"},
76+
),
77+
Alias(scale_position, name="scale_position", prefix="+c", separator="/"),
78+
Alias(fancy, name="fancy", prefix="+f"),
79+
Alias(justify, name="justify", prefix="+j"),
80+
Alias(label, name="label", prefix="+l"),
81+
Alias(offset, name="offset", prefix="+o", separator="/", size=[1, 2]),
82+
Alias(unit, name="unit", prefix="+u"),
83+
Alias(vertical, name="vertical", prefix="+v"),
84+
],
85+
F=Alias(box, name="box"),
86+
)
87+
88+
with Session() as lib:
89+
lib.call_module(module="basemap", args=build_arg_list(aliasdict))

0 commit comments

Comments
 (0)