1414import functools
1515import itertools
1616import math
17+ from numbers import Integral
1718import textwrap
1819
1920import numpy as np
@@ -3104,17 +3105,6 @@ def errorbar(self, x, y, z, zerr=None, yerr=None, xerr=None, fmt='',
31043105 kwargs = {k : v for k , v in kwargs .items () if v is not None }
31053106 kwargs .setdefault ('zorder' , 2 )
31063107
3107- try :
3108- offset , errorevery = errorevery
3109- except TypeError :
3110- offset = 0
3111-
3112- if errorevery < 1 or int (errorevery ) != errorevery :
3113- raise ValueError (
3114- 'errorevery must be positive integer or tuple of integers' )
3115- if int (offset ) != offset :
3116- raise ValueError ("errorevery's starting index must be an integer" )
3117-
31183108 self ._process_unit_info ([("x" , x ), ("y" , y ), ("z" , z )], kwargs ,
31193109 convert = False )
31203110
@@ -3127,6 +3117,34 @@ def errorbar(self, x, y, z, zerr=None, yerr=None, xerr=None, fmt='',
31273117 if not len (x ) == len (y ) == len (z ):
31283118 raise ValueError ("'x', 'y', and 'z' must have the same size" )
31293119
3120+ if isinstance (errorevery , Integral ):
3121+ errorevery = (0 , errorevery )
3122+ if isinstance (errorevery , tuple ):
3123+ if (len (errorevery ) == 2 and
3124+ isinstance (errorevery [0 ], Integral ) and
3125+ isinstance (errorevery [1 ], Integral )):
3126+ errorevery = slice (errorevery [0 ], None , errorevery [1 ])
3127+ else :
3128+ raise ValueError (
3129+ f'errorevery={ errorevery !r} is a not a tuple of two '
3130+ f'integers' )
3131+
3132+ elif isinstance (errorevery , slice ):
3133+ pass
3134+
3135+ elif not isinstance (errorevery , str ) and np .iterable (errorevery ):
3136+ # fancy indexing
3137+ try :
3138+ x [errorevery ]
3139+ except (ValueError , IndexError ) as err :
3140+ raise ValueError (
3141+ f"errorevery={ errorevery !r} is iterable but not a valid "
3142+ f"NumPy fancy index to match "
3143+ f"'xerr'/'yerr'/'zerr'" ) from err
3144+ else :
3145+ raise ValueError (
3146+ f"errorevery={ errorevery !r} is not a recognized value" )
3147+
31303148 label = kwargs .pop ("label" , None )
31313149 kwargs ['label' ] = '_nolegend_'
31323150
@@ -3189,7 +3207,7 @@ def errorbar(self, x, y, z, zerr=None, yerr=None, xerr=None, fmt='',
31893207 eb_cap_style ['color' ] = ecolor
31903208
31913209 everymask = np .zeros (len (x ), bool )
3192- everymask [offset :: errorevery ] = True
3210+ everymask [errorevery ] = True
31933211
31943212 def _apply_mask (arrays , mask ):
31953213 # Return, for each array in *arrays*, the elements for which *mask*
0 commit comments