8000 Re-sync errorevery parsing from 2D to 3D errorbar. · matplotlib/matplotlib@0102e2b · GitHub
[go: up one dir, main page]

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 0102e2b

Browse files
committed
Re-sync errorevery parsing from 2D to 3D errorbar.
1 parent ea2b1ef commit 0102e2b

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)
0