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

Skip to content

Commit 87640bb

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 566bd8b commit 87640bb

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
@@ -2979,10 +2979,14 @@ def errorbar(self, x, y, yerr=None, xerr=None,
29792979
and *yerr*. To use limits with inverted axes, :meth:`set_xlim`
29802980
or :meth:`set_ylim` must be called before :meth:`errorbar`.
29812981

2982-
errorevery : positive integer, optional, default: 1
2983-
Subsamples the errorbars. e.g., if errorevery=5, errorbars for
2984-
every 5-th datapoint will be plotted. The data plot itself still
2985-
shows all data points.
2982+
errorevery : int or (int, int), optional, default: 1
2983+
draws error bars on a subset of the data. *errorevery* =N draws
2984+
error bars on the points (x[::N], y[::N]).
2985+
*errorevery* =(start, N) draws error bars on the points
2986+
(x[start::N], y[start::N]). e.g. errorevery=(6,3)
2987+
adds error bars to the data at (x[3], x[9], x[15], x[21], ...).
2988+
Used to avoid overlapping error bars when two series share x-axis
2989+
values.
29862990

29872991
Returns
29882992
-------
@@ -3027,9 +3031,16 @@ def errorbar(self, x, y, yerr=None, xerr=None,
30273031
kwargs = {k: v for k, v in kwargs.items() if v is not None}
30283032
kwargs.setdefault('zorder', 2)
30293033

3030-
if errorevery < 1:
3031-
raise ValueError(
3032-
'errorevery has to be a strictly positive integer')
3034+
try:
3035+
offset, errorevery = errorevery
3036+
except TypeError:
3037+
offset = 0
3038+
3039+
int_msg = 'errorevery must be positive integer or tuple of integers'
3040+
if errorevery < 1 or int(errorevery) != errorevery:
3041+
raise ValueError(int_msg)
3042+
if int(offset) != offset:
3043+
raise ValueError(int_msg)
30333044

30343045
self._process_unit_info(xdata=x, ydata=y, kwargs=kwargs)
30353046

@@ -3138,7 +3149,8 @@ def errorbar(self, x, y, yerr=None, xerr=None,
31383149
xlolims = np.broadcast_to(xlolims, len(x)).astype(bool)
31393150
xuplims = np.broadcast_to(xuplims, len(x)).astype(bool)
31403151

3141-
everymask = np.arange(len(x)) % errorevery == 0
3152+
everymask = np.zeros(len(x), bool)
3153+
everymask[offset::errorevery] = True
31423154

31433155
def xywhere(xs, ys, mask):
31443156
"""

0 commit comments

Comments
 (0)