From 233b9aa308dcda69b3688ad75d4622301e89a0bb Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Sun, 20 Sep 2020 23:43:10 +1200 Subject: [PATCH] Alias ax (c) for subplot Used to advance to the selected subplot panel. Technically only allowed when in subplot mode. See https://docs.generic-mapping-tools.org/latest/gmt.html#c-full. --- pygmt/base_plotting.py | 23 +++++++++++-------- pygmt/figure.py | 2 +- pygmt/tests/baseline/test_subplot_direct.png | Bin 0 -> 11459 bytes pygmt/tests/test_subplot.py | 12 ++++++++++ 4 files changed, 26 insertions(+), 11 deletions(-) create mode 100644 pygmt/tests/baseline/test_subplot_direct.png diff --git a/pygmt/base_plotting.py b/pygmt/base_plotting.py index 6f7a4616ed2..a64bec8cbec 100644 --- a/pygmt/base_plotting.py +++ b/pygmt/base_plotting.py @@ -68,6 +68,7 @@ def _preprocess(self, **kwargs): # pylint: disable=no-self-use G="land", S="water", U="timestamp", + c="ax", t="transparency", ) @kwargs_to_strings(R="sequence") @@ -146,6 +147,7 @@ def coast(self, **kwargs): F="box", G="truncate", W="scale", + c="ax", t="transparency", ) @kwargs_to_strings(R="sequence", G="sequence") @@ -228,6 +230,7 @@ def colorbar(self, **kwargs): S="resample", U="timestamp", W="pen", + c="ax", l="label", t="transparency", ) @@ -309,6 +312,7 @@ def grdcontour(self, grid, **kwargs): B="frame", I="shading", C="cmap", + c="ax", t="transparency", ) @kwargs_to_strings(R="sequence") @@ -358,6 +362,7 @@ def grdimage(self, grid, **kwargs): Wf="facadepen", p="perspective", I="shading", + c="ax", t="transparency", ) @kwargs_to_strings(R="sequence", p="sequence") @@ -476,6 +481,7 @@ def grdview(self, grid, **kwargs): l="label", C="cmap", U="timestamp", + c="ax", t="transparency", ) @kwargs_to_strings(R="sequence", i="sequence_comma") @@ -597,6 +603,7 @@ def plot(self, x=None, y=None, data=None, sizes=None, direction=None, **kwargs): i="columns", l="label", C="levels", + c="ax", t="transparency", ) @kwargs_to_strings(R="sequence", i="sequence_comma") @@ -686,6 +693,7 @@ def contour(self, x=None, y=None, z=None, data=None, **kwargs): Td="rose", Tm="compass", U="timestamp", + c="ax", t="transparency", ) @kwargs_to_strings(R="sequence") @@ -736,6 +744,7 @@ def basemap(self, **kwargs): U="timestamp", D="position", F="box", + c="ax", t="transparency", ) @kwargs_to_strings(R="sequence") @@ -779,6 +788,7 @@ def logo(self, **kwargs): D="position", F="box", M="monochrome", + c="ax", t="transparency", ) @kwargs_to_strings(R="sequence") @@ -823,11 +833,7 @@ def image(self, imagefile, **kwargs): @fmt_docstring @use_alias( - R="region", - J="projection", - D="position", - F="box", - t="transparency", + R="region", J="projection", D="position", F="box", c="ax", t="transparency" ) @kwargs_to_strings(R="sequence") def legend(self, spec=None, position="JTR+jTR+o0.2c", box="+gwhite+p1p", **kwargs): @@ -893,6 +899,7 @@ def legend(self, spec=None, position="JTR+jTR+o0.2c", box="+gwhite+p1p", **kwarg D="offset", G="fill", W="pen", + c="ax", t="transparency", ) @kwargs_to_strings( @@ -1050,11 +1057,7 @@ def text( @fmt_docstring @use_alias( - R="region", - J="projection", - B="frame", - C="offset", - t="transparency", + R="region", J="projection", B="frame", C="offset", c="ax", t="transparency" ) @kwargs_to_strings(R="sequence") def meca( diff --git a/pygmt/figure.py b/pygmt/figure.py index 91835601633..885345df51f 100644 --- a/pygmt/figure.py +++ b/pygmt/figure.py @@ -430,7 +430,7 @@ def sca(self, ax=None, **kwargs): """ arg_str = " ".join(["set", f"{ax}", build_arg_string(kwargs)]) with Session() as lib: - lib.call_module(module=f"subplot", args=arg_str) + lib.call_module(module="subplot", args=arg_str) @fmt_docstring @use_alias(V="verbose") diff --git a/pygmt/tests/baseline/test_subplot_direct.png b/pygmt/tests/baseline/test_subplot_direct.png new file mode 100644 index 0000000000000000000000000000000000000000..4cedf3e8669e9cafe013f07ef8b5460fa1e608a0 GIT binary patch literal 11459 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 literal 0 HcmV?d00001 diff --git a/pygmt/tests/test_subplot.py b/pygmt/tests/test_subplot.py index 7b8b1ee5504..383866a124d 100644 --- a/pygmt/tests/test_subplot.py +++ b/pygmt/tests/test_subplot.py @@ -32,3 +32,15 @@ def test_subplot_frame(): fig.basemap(region=[0, 3, 0, 3], frame="+tplot1") fig.end_subplot() return fig + + +@pytest.mark.mpl_image_compare +def test_subplot_direct(): + """ + Plot map elements to subplots directly using ax argument + """ + fig, axs = subplots(nrows=2, ncols=1, figsize=("3c", "6c")) + fig.basemap(region=[0, 3, 0, 3], frame=True, ax=axs[0, 0]) + fig.basemap(region=[0, 3, 0, 3], frame=True, ax=axs[1, 0]) + fig.end_subplot() + return fig