Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Figure.timestamp to plot the GMT timestamp logo #2208

Merged
merged 44 commits into from
Mar 3, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
c8206ec
Add Figure.timestamp to plot the GMT timestamp logo
seisman Nov 24, 2022
2096760
Merge branch 'main' into timestamp
seisman Jan 1, 2023
e0bb6bb
Add Figure.timestamp to the API reference documentation
seisman Jan 1, 2023
4d6d777
Improve the timestamp function
seisman Jan 1, 2023
fffe3cd
Add the timefmt parmater to set time timestamp format
seisman Jan 1, 2023
54f4307
Fix formattingg
seisman Jan 1, 2023
fe8eeac
Merge branch 'main' into timestamp
seisman Jan 29, 2023
97574ac
Merge branch 'main' into timestamp
seisman Jan 30, 2023
1e8de17
Fix the configurations
seisman Jan 31, 2023
79460fb
Add the first test
seisman Jan 31, 2023
7031448
Add the first test
seisman Jan 31, 2023
7ad112c
Merge branch 'main' into timestamp
seisman Feb 4, 2023
b057ad8
Pass GMT parameters directly to the build_arg_string function
seisman Feb 4, 2023
f92d272
fix
seisman Feb 4, 2023
cecf6de
Merge branch 'main' into timestamp
seisman Feb 12, 2023
7dd74d7
Fix the dvc-diff workflow
seisman Feb 12, 2023
06049a6
Update the baseline image
seisman Feb 12, 2023
876d963
Revert "Fix the dvc-diff workflow"
seisman Feb 12, 2023
752273e
Fix the dvc-diff workflow
seisman Feb 12, 2023
f6795a9
Fix linting errors
seisman Feb 12, 2023
9eba2a9
Add more timestamp tests
seisman Feb 12, 2023
92c285a
Add a test for the 'text' parameter
seisman Feb 12, 2023
776981b
Fix docstrings
seisman Feb 12, 2023
c771183
Fix docstrings
seisman Feb 12, 2023
386882e
Add the missing r prefix
seisman Feb 12, 2023
e3580e7
Merge branch 'main' into timestamp
seisman Feb 12, 2023
41f5419
Check if the text string is longer than 64 characters
seisman Feb 13, 2023
4def360
Merge branch 'main' into timestamp
seisman Feb 14, 2023
bc64e8c
Fix docstring
seisman Feb 15, 2023
78c2307
Fix docstring
seisman Feb 15, 2023
e6248c2
Apply suggestions from code review
seisman Feb 15, 2023
d989b22
Merge branch 'main' into timestamp
michaelgrund Feb 15, 2023
960508f
Apply suggestions from code review
seisman Feb 16, 2023
16c0368
Merge branch 'main' into timestamp
seisman Feb 17, 2023
98b6762
Use the package-level variable __gmt_version__
seisman Feb 17, 2023
b8a7fbb
Merge branch 'main' into timestamp
seisman Feb 21, 2023
688f6b0
Fix formatting
seisman Feb 21, 2023
6e168e1
Merge branch 'main' into timestamp
seisman Feb 28, 2023
5857866
Use the __gmt_version__ variable
seisman Feb 28, 2023
01a3cbb
Merge branch 'main' into timestamp
seisman Feb 28, 2023
4fa2e72
Remove unused imports
seisman Mar 1, 2023
0c07a48
Minor changes to the docstrings
seisman Mar 1, 2023
e4bd94c
Update pygmt/src/timestamp.py
seisman Mar 2, 2023
0079643
Fix docstrings for font
seisman Mar 2, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pygmt/figure.py
Original file line number Diff line number Diff line change
Expand Up @@ -523,6 +523,7 @@ def _repr_html_(self):
subplot,
ternary,
text,
timestamp,
velo,
wiggle,
)
Expand Down
1 change: 1 addition & 0 deletions pygmt/src/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
from pygmt.src.surface import surface
from pygmt.src.ternary import ternary
from pygmt.src.text import text_ as text # "text" is an argument within "text_"
from pygmt.src.timestamp import timestamp
from pygmt.src.triangulate import triangulate
from pygmt.src.velo import velo
from pygmt.src.which import which
Expand Down
70 changes: 70 additions & 0 deletions pygmt/src/timestamp.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
"""
timestamp - Plot the GMT timestamp logo.
"""
from packaging.version import Version
from pygmt.clib import Session
from pygmt.helpers import build_arg_string, is_nonstr_iter

__doctest_skip__ = ["timestamp"]


def timestamp(
self, label=None, justification="BL", offset=("-54p", "-54p"), font="Helvetica"
):
"""
Plot the GMT timestamp logo.
yvonnefroehlich marked this conversation as resolved.
Show resolved Hide resolved

Parameters
----------
label : str
The text string shown after the GMT timestamp logo.
yvonnefroehlich marked this conversation as resolved.
Show resolved Hide resolved
justification : str
Justification of the timestamp. *justification* is a two-character code
yvonnefroehlich marked this conversation as resolved.
Show resolved Hide resolved
seisman marked this conversation as resolved.
Show resolved Hide resolved
that is a combination of a horizontal (**L**(eft), **C**(enter), or
**R**(ight)) and a vertical (**T**(op), **M**(iddle), or **B**(ottom))
code.
offset : str or list
(*offset_x*, *offset_y*) or *offset*.
Offset the anchor point of the timestamp by *offset_x* and *offset_y*.
yvonnefroehlich marked this conversation as resolved.
Show resolved Hide resolved
If a single value *offset* is given, *offset_y*=*offset_x*=*offset*.
font : str
Font name or font number of the timestamp and the optional label .

Examples
--------
>>> # Plot the GMT timestamp logo.
yvonnefroehlich marked this conversation as resolved.
Show resolved Hide resolved
>>> import pygmt
>>> fig = pygmt.Figure()
>>> fig.timestamp()
>>> fig.show()

>>> # Plot the GMT timestamp logo with a custom label.
yvonnefroehlich marked this conversation as resolved.
Show resolved Hide resolved
>>> fig = pygmt.Figure()
>>> fig.timestamp(label="Powered by PyGMT")
>>> fig.show()
"""
self._preprocess() # pylint: disable=protected-access

kwdict = {}
kwdict["T"] = True # pass the -T option to the plot module
kwdict["U"] = True

# build the argument for the -U option
label = "" if label is None else f"{label}"
kwdict["U"] = f"{label}+j{justification}"

if is_nonstr_iter(offset): # given a list
kwdict["U"] += "+o" + "/".join(f"{item}" for item in offset)
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please note that we can't use decorator @kwargs_to_strings(offset="sequence") here, because the decorator can only deal with keyword arguments and doesn't work for the default values. I.e., it doesn't work for Figure.timestamp() but works for Figure.timestamp(offset=["-54p", "-54p"]), although offset defaults to ["-54p", "-54p"].

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Related issue report at #2361.

else:
kwdict["U"] += f"+o{offset}"
if "/" not in offset:
# Giving a single offset doesn't work in GMT <= 6.4.0.
# See https://github.com/GenericMappingTools/gmt/issues/7107.
with Session() as lib:
if Version(lib.info["version"]) < Version("6.5.0"):
kwdict["U"] += "/{offset}"

with Session() as lib:
lib.call_module(
module="plot", args=build_arg_string(kwdict) + f" --FONT_LOGO={font}"
)