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

Skip to content

Commit 81f957f

Browse files
committed
Added ability to offset errorbars with errorevery
In addition to adding errorbars on a subset of data points one may add them to (2, 5, 8...) rather than (0, 3, 6...) to avoid overlaps.
1 parent 557cdfa commit 81f957f

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

lib/matplotlib/axes/_axes.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3146,10 +3146,14 @@ def errorbar(self, x, y, yerr=None, xerr=None,
31463146
and *yerr*. To use limits with inverted axes, :meth:`set_xlim`
31473147
or :meth:`set_ylim` must be called before :meth:`errorbar`.
31483148
3149-
errorevery : positive integer, optional, default: 1
3150-
Subsamples the errorbars. e.g., if errorevery=5, errorbars for
3151-
every 5-th datapoint will be plotted. The data plot itself still
3152-
shows all data points.
3149+
errorevery : int or (int, int), optional, default: 1
3150+
draws error bars on a subset of the data. *errorevery* =N draws
3151+
error bars on the points (x[::N], y[::N]).
3152+
*errorevery* =(start, N) draws error bars on the points
3153+
(x[start::N], y[start::N]). e.g. errorevery=(6,3)
3154+
adds error bars to the data at (x[3], x[9], x[15], x[21], ...).
3155+
Used to avoid overlapping error bars when two series share x-axis
3156+
values.
31533157
31543158
Returns
31553159
-------
@@ -3194,9 +3198,16 @@ def errorbar(self, x, y, yerr=None, xerr=None,
31943198
kwargs = {k: v for k, v in kwargs.items() if v is not None}
31953199
kwargs.setdefault('zorder', 2)
31963200

3197-
if errorevery < 1:
3198-
raise ValueError(
3199-
'errorevery has to be a strictly positive integer')
3201+
try:
3202+
offset, errorevery = errorevery
3203+
except TypeError:
3204+
offset = 0
3205+
3206+
int_msg = 'errorevery must be positive integer or tuple of integers'
3207+
if errorevery < 1 or int(errorevery) != errorevery:
3208+
raise ValueError(int_msg)
3209+
if int(offset) != offset:
3210+
raise ValueError(int_msg)
32003211

32013212
self._process_unit_info(xdata=x, ydata=y, kwargs=kwargs)
32023213

@@ -3305,7 +3316,8 @@ def errorbar(self, x, y, yerr=None, xerr=None,
33053316
xlolims = np.broadcast_to(xlolims, len(x)).astype(bool)
33063317
xuplims = np.broadcast_to(xuplims, len(x)).astype(bool)
33073318

3308-
everymask = np.arange(len(x)) % errorevery == 0
3319+
everymask = np.zeros(len(x), bool)
3320+
everymask[offset::errorevery] = True
33093321

33103322
def xywhere(xs, ys, mask):
33113323
"""

0 commit comments

Comments
 (0)