14
14
import functools
15
15
import itertools
16
16
import math
17
+ from numbers import Integral
17
18
import textwrap
18
19
19
20
import numpy as np
@@ -3104,17 +3105,6 @@ def errorbar(self, x, y, z, zerr=None, yerr=None, xerr=None, fmt='',
3104
3105
kwargs = {k : v for k , v in kwargs .items () if v is not None }
3105
3106
kwargs .setdefault ('zorder' , 2 )
3106
3107
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
-
3118
3108
self ._process_unit_info ([("x" , x ), ("y" , y ), ("z" , z )], kwargs ,
3119
3109
convert = False )
3120
3110
@@ -3127,6 +3117,34 @@ def errorbar(self, x, y, z, zerr=None, yerr=None, xerr=None, fmt='',
3127
3117
if not len (x ) == len (y ) == len (z ):
3128
3118
raise ValueError ("'x', 'y', and 'z' must have the same size" )
3129
3119
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
+
3130
3148
label = kwargs .pop ("label" , None )
3131
3149
kwargs ['label' ] = '_nolegend_'
3132
3150
@@ -3189,7 +3207,7 @@ def errorbar(self, x, y, z, zerr=None, yerr=None, xerr=None, fmt='',
3189
3207
eb_cap_style ['color' ] = ecolor
3190
3208
3191
3209
everymask = np .zeros (len (x ), bool )
3192
- everymask [offset :: errorevery ] = True
3210
+ everymask [errorevery ] = True
3193
3211
3194
3212
def _apply_mask (arrays , mask ):
3195
3213
# Return, for each array in *arrays*, the elements for which *mask*
0 commit comments