Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3d58781

Browse files
committed
Re-sync errorevery parsing from 2D to 3D errorbar.
1 parent d3b5623 commit 3d58781

File tree

1 file changed

+30
-12
lines changed

1 file changed

+30
-12
lines changed

lib/mpl_toolkits/mplot3d/axes3d.py

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import functools
1515
import itertools
1616
import math
17+
from numbers import Integral
1718
import textwrap
1819

1920
import 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

Comments
 (0)