Skip to content

Commit

Permalink
Added twinx(), twiny(), invert_xaxis(), and invert_yaxis() to…
Browse files Browse the repository at this point in the history
… the `named_arrays.plt` module. (#85)
  • Loading branch information
byrdie authored Oct 15, 2024
1 parent b2fe95e commit d02d1a6
Show file tree
Hide file tree
Showing 3 changed files with 132 additions and 0 deletions.
4 changes: 4 additions & 0 deletions named_arrays/_scalars/scalar_named_array_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@
na.plt.get_xscale,
na.plt.get_yscale,
na.plt.get_aspect,
na.plt.twinx,
na.plt.twiny,
na.plt.invert_xaxis,
na.plt.invert_yaxis,
)
PLT_AXES_ATTRIBUTES = (
na.plt.transAxes,
Expand Down
72 changes: 72 additions & 0 deletions named_arrays/plt.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@
"get_aspect",
"transAxes",
"transData",
"twinx",
"twiny",
"invert_xaxis",
"invert_yaxis",
]


Expand Down Expand Up @@ -1156,6 +1160,74 @@ def transData(
)


def twinx(
ax: None | matplotlib.axes.Axes | na.AbstractScalar = None,
) -> na.AbstractScalar:
"""
A thin wrapper around :meth:`matplotlib.axes.Axes.twinx` for named arrays.
Parameters
----------
ax
The matplotlib axes instance(s) to make the twin axes from.
"""
return na._named_array_function(
twinx,
ax=na.as_named_array(ax),
)


def twiny(
ax: None | matplotlib.axes.Axes | na.AbstractScalar = None,
) -> na.AbstractScalar:
"""
A thin wrapper around :meth:`matplotlib.axes.Axes.twiny` for named arrays.
Parameters
----------
ax
The matplotlib axes instance(s) to make the twin axes from.
"""
return na._named_array_function(
twiny,
ax=na.as_named_array(ax),
)


def invert_xaxis(
ax: None | matplotlib.axes.Axes | na.AbstractScalar = None,
) -> na.AbstractScalar:
"""
A thin wrapper around :meth:`matplotlib.axes.Axes.invert_xaxis` for named arrays.
Parameters
----------
ax
The matplotlib axes instance(s) to invert the horizontal axis of.
"""
return na._named_array_function(
invert_xaxis,
ax=na.as_named_array(ax),
)


def invert_yaxis(
ax: None | matplotlib.axes.Axes | na.AbstractScalar = None,
) -> na.AbstractScalar:
"""
A thin wrapper around :meth:`matplotlib.axes.Axes.invert_yaxis` for named arrays.
Parameters
----------
ax
The matplotlib axes instance(s) to invert the vertical axis of.
"""
return na._named_array_function(
invert_xaxis,
ax=na.as_named_array(ax),
)


def brace_vertical(
x: float | u.Quantity | na.AbstractScalar,
width: float | u.Quantity | na.AbstractScalar,
Expand Down
56 changes: 56 additions & 0 deletions named_arrays/tests/test_plt.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,3 +172,59 @@ def test_transData(
result = na.plt.transData(ax)
assert isinstance(result, na.AbstractArray)
assert result.shape == na.shape(ax)


@pytest.mark.parametrize(
argnames="ax",
argvalues=[
None,
na.plt.subplots(ncols=3)[1]
]
)
def test_twinx(
ax: None | matplotlib.axes.Axes | na.AbstractScalar,
):
result = na.plt.twinx(ax)
for r in np.nditer(result.ndarray, flags=("refs_ok",)):
assert isinstance(r.item(), matplotlib.axes.Axes)


@pytest.mark.parametrize(
argnames="ax",
argvalues=[
None,
na.plt.subplots(ncols=3)[1]
]
)
def test_twiny(
ax: None | matplotlib.axes.Axes | na.AbstractScalar,
):
result = na.plt.twiny(ax)
for r in np.nditer(result.ndarray, flags=("refs_ok",)):
assert isinstance(r.item(), matplotlib.axes.Axes)


@pytest.mark.parametrize(
argnames="ax",
argvalues=[
None,
na.plt.subplots(ncols=3)[1]
]
)
def test_invert_xaxis(
ax: None | matplotlib.axes.Axes | na.AbstractScalar,
):
na.plt.invert_xaxis(ax)


@pytest.mark.parametrize(
argnames="ax",
argvalues=[
None,
na.plt.subplots(ncols=3)[1]
]
)
def test_invert_yaxis(
ax: None | matplotlib.axes.Axes | na.AbstractScalar,
):
na.plt.invert_yaxis(ax)

0 comments on commit d02d1a6

Please sign in to comment.