diff --git a/pygmt/src/meca.py b/pygmt/src/meca.py index 86708730cde..fefe412500a 100644 --- a/pygmt/src/meca.py +++ b/pygmt/src/meca.py @@ -273,9 +273,9 @@ def meca( if depth is not None: spec["depth"] = np.atleast_1d(depth) if plot_longitude is not None: # must be in string type - spec["plot_longitude"] = np.atleast_1d(plot_longitude).astype(str) + spec["plot_longitude"] = np.atleast_1d(plot_longitude) if plot_latitude is not None: # must be in string type - spec["plot_latitude"] = np.atleast_1d(plot_latitude).astype(str) + spec["plot_latitude"] = np.atleast_1d(plot_latitude) if event_name is not None: spec["event_name"] = np.atleast_1d(event_name).astype(str) @@ -293,9 +293,13 @@ def meca( newcols = ["longitude", "latitude", "depth"] + param_conventions[convention] if "plot_longitude" in spec.columns and "plot_latitude" in spec.columns: newcols += ["plot_longitude", "plot_latitude"] + spec[["plot_longitude", "plot_latitude"]] = spec[ + ["plot_longitude", "plot_latitude"] + ].astype(str) kwargs["A"] = True if "event_name" in spec.columns: newcols += ["event_name"] + spec["event_name"] = spec["event_name"].astype(str) # reorder columns in DataFrame spec = spec.reindex(newcols, axis=1) elif isinstance(spec, np.ndarray) and spec.ndim == 1: diff --git a/pygmt/tests/test_meca.py b/pygmt/tests/test_meca.py index ea7486079a2..8f2513edbb6 100644 --- a/pygmt/tests/test_meca.py +++ b/pygmt/tests/test_meca.py @@ -253,6 +253,33 @@ def test_meca_dict_offset(): return fig +@pytest.mark.mpl_image_compare(filename="test_meca_dict_offset.png") +def test_meca_dict_offset_in_dict(): + """ + Test offsetting beachballs for a dict input with offset parameters in the + dict. + See https://github.com/GenericMappingTools/pygmt/issues/2016. + """ + fig = Figure() + focal_mechanism = dict( + strike=330, + dip=30, + rake=90, + magnitude=3, + plot_longitude=-124.5, + plot_latitude=47.5, + ) + fig.basemap(region=[-125, -122, 47, 49], projection="M6c", frame=True) + fig.meca( + spec=focal_mechanism, + scale="1c", + longitude=-124, + latitude=48, + depth=12.0, + ) + return fig + + @pytest.mark.mpl_image_compare def test_meca_dict_eventname(): """