@@ -1632,6 +1632,11 @@ def set_major_formatter(self, formatter):
16321632 formatter : `~matplotlib.ticker.Formatter`
16331633 """
16341634 cbook ._check_isinstance (mticker .Formatter , formatter = formatter )
1635+ if (isinstance (formatter , mticker .FixedFormatter )
1636+ and len (formatter .seq ) > 0
1637+ and not isinstance (self .major .locator , mticker .FixedLocator )):
1638+ cbook ._warn_external ('FixedFormatter should only be used together '
1639+ 'with FixedLocator' )
16351640 self .isDefault_majfmt = False
16361641 self .major .formatter = formatter
16371642 formatter .set_axis (self )
@@ -1646,6 +1651,11 @@ def set_minor_formatter(self, formatter):
16461651 formatter : `~matplotlib.ticker.Formatter`
16471652 """
16481653 cbook ._check_isinstance (mticker .Formatter , formatter = formatter )
1654+ if (isinstance (formatter , mticker .FixedFormatter )
1655+ and len (formatter .seq ) > 0
1656+ and not isinstance (self .minor .locator , mticker .FixedLocator )):
1657+ cbook ._warn_external ('FixedFormatter should only be used together '
1658+ 'with FixedLocator' )
16491659 self .isDefault_minfmt = False
16501660 self .minor .formatter = formatter
16511661 formatter .set_axis (self )
@@ -1697,6 +1707,11 @@ def set_ticklabels(self, ticklabels, *args, minor=False, **kwargs):
16971707 r"""
16981708 Set the text values of the tick labels.
16991709
1710+ .. warning::
1711+ This method should only be used after fixing the tick positions
1712+ using `.Axis.set_ticks`. Otherwise, the labels may end up in
1713+ unexpected positions.
1714+
17001715 Parameters
17011716 ----------
17021717 ticklabels : sequence of str or of `Text`\s
@@ -1718,18 +1733,8 @@ def set_ticklabels(self, ticklabels, *args, minor=False, **kwargs):
17181733 "3.1" , message = "Additional positional arguments to "
17191734 "set_ticklabels are ignored, and deprecated since Matplotlib "
17201735 "3.1; passing them will raise a TypeError in Matplotlib 3.3." )
1721- get_labels = []
1722- for t in ticklabels :
1723- # try calling get_text() to check whether it is Text object
1724- # if it is Text, get label content
1725- try :
1726- get_labels .append (t .get_text ())
1727- # otherwise add the label to the list directly
1728- except AttributeError :
1729- get_labels .append (t )
1730- # replace the ticklabels list with the processed one
1731- ticklabels = get_labels
1732-
1736+ ticklabels = [t .get_text () if hasattr (t , 'get_text' ) else t
1737+ for t in ticklabels ]
17331738 if minor :
17341739 self .set_minor_formatter (mticker .FixedFormatter (ticklabels ))
17351740 ticks = self .get_minor_ticks ()
0 commit comments