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 support for ax.locator_params() #126

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 5 additions & 0 deletions nc_time_axis/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,11 @@ def has_year_zero(year):
ticks = [t for t in ticks if t.year != 0]
return cftime.date2num(ticks, self.date_unit, calendar=self.calendar)

def set_params(self, **kwargs):
self._max_n_locator_days.set_params(**kwargs)
self._max_n_locator.set_params(**kwargs)
return
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
return



class NetCDFTimeConverter(mdates.DateConverter):
"""
Expand Down
10 changes: 10 additions & 0 deletions nc_time_axis/tests/integration/test_plot.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,16 @@ def test_fill_between(self):

plt.fill_between(cdt, temperatures, 0)

def test_locator_params(self):
times = cftime.num2date(
np.arange(30), nc_time_axis._TIME_UNITS, calendar="360_day"
)
plt.plot(times, np.arange(30))
plt.locator_params(axis="x", min_n_ticks=15)
plt.draw()
ticks = plt.xticks()[0]
self.assertFalse(ticks.size < 15)


def setup_function(function):
plt.close()
Expand Down
45 changes: 45 additions & 0 deletions nc_time_axis/tests/unit/test_NetCDFTimeDateLocator.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,5 +185,50 @@ def test_NetCDFTimeDateLocator_date_unit_warning():
NetCDFTimeDateLocator(5, "360_day", "days since 2000-01-01")


class Test_set_params(unittest.TestCase):
def setUp(self):
# list of maxs to trigger different resolutions
self.vmax_list = [0.0003, 0.02, 1, 30, 365, 5000]
self.params = {"nbins": 10, "min_n_ticks": 4}

def check(self, max_n_ticks, **kwargs):
# Create an instance of your class
locator = NetCDFTimeDateLocator(
max_n_ticks=max_n_ticks, calendar="gregorian"
)
# Call the set_params method
locator.set_params(**kwargs)
return locator

def test_set_params(self):
for key, value in self.params.items():
for vmax in self.vmax_list:
locator = self.check(3, **{key: value})
ticks = locator.tick_values(0, vmax)
# Assert that the expected values are set and returned
if key == "nbins":
# not more than max + 1
self.assertFalse(ticks.size > value + 1)
# make sure number of ticks increased from initial
self.assertTrue(ticks.size > 4)
elif key == "min_n_ticks":
# not less than min
self.assertFalse(ticks.size < value)
else:
raise ValueError(
"tests on parameters other than nbins and min_n_ticks are not"
" yet implemented"
)

# Add more assertions to test the behavior of the method
# For example, you can assert that the internal state of the locator is updated correctly
self.assertEqual(
getattr(locator._max_n_locator_days, f"_{key}"), value
)
self.assertEqual(
getattr(locator._max_n_locator, f"_{key}"), value
)
Comment on lines +223 to +230
Copy link
Member

Choose a reason for hiding this comment

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

I could go either way on including these checks. They are a nice explicit way of checking that the set_params method worked as expected, though they depend on private attributes of the MaxNLocator class. I'm not sure if anyone else has opinions.



if __name__ == "__main__":
unittest.main()