Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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
4 changes: 4 additions & 0 deletions docs/iris/src/whatsnew/latest.rst
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,10 @@ This document explains the changes made to Iris for this release
which was previously failing for some coordinate systems. See :issue:`3629`.
(:pull:`3804`)

* `@stephenworsley`_ changed the way tick labels are assigned from string coords.
Previously, the first tick label would occasionally be duplicated. This also
removes the use of Matplotlib's deprecated ``IndexFormatter``. (:pull:`3857`)


💣 Incompatible Changes
=======================
Expand Down
14 changes: 13 additions & 1 deletion lib/iris/plot.py
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,19 @@ def _string_coord_axis_tick_labels(string_axes, axes=None):

ax = axes if axes else plt.gca()
for axis, ticks in string_axes.items():
formatter = mpl_ticker.IndexFormatter(ticks)
# Define a tick formatter, this replaces the now deprecated
# mpl_ticker.IndexFormatter. Note that this formatter behaves
# differently to IndexFormatter and will only assign labels to
# ticks which are located precisely on integers in
# range(len(ticks)).
def ticker_func(x, _):
tick_locations = range(len(ticks))
labels = ticks
label_dict = dict(zip(tick_locations, labels))
label = label_dict.get(x, "")
return label

formatter = mpl_ticker.FuncFormatter(ticker_func)
locator = mpl_ticker.MaxNLocator(integer=True)
this_axis = getattr(ax, axis)
this_axis.set_major_formatter(formatter)
Expand Down
2 changes: 1 addition & 1 deletion lib/iris/tests/unit/plot/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def tick_loc_and_label(self, axis_name, axes=None):
def assertBoundsTickLabels(self, axis, axes=None):
actual = self.tick_loc_and_label(axis, axes)
expected = [
(-1.0, "a"),
(-1.0, ""),
(0.0, "a"),
(1.0, "b"),
(2.0, "c"),
Expand Down