I have several values of a function at different x points. I want to plot the mean and std in python, like the answer of this SO question. I know this must be easy using matplotlib, but I have no idea of the function's name that can do that. Does anyone know it?
Asked
Active
Viewed 3e+01k times
84
-
6http://matplotlib.org/gallery.html <- a good place to start to sort out what functions do what. – tacaswell Mar 18 '14 at 16:25
2 Answers
115
plt.errorbar
can be used to plot x, y, error data (as opposed to the usual plt.plot
)
import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 2, 3, 4, 5])
y = np.power(x, 2) # Effectively y = x**2
e = np.array([1.5, 2.6, 3.7, 4.6, 5.5])
plt.errorbar(x, y, e, linestyle='None', marker='^')
plt.show()
plt.errorbar
accepts the same arguments as plt.plot
with additional yerr
and xerr
which default to None (i.e. if you leave them blank it will act as plt.plot
).

Ffisegydd
- 51,807
- 15
- 147
- 125
-
24To add those small horizontal lines on the top and the bottom of a candle, specify the capsize option. E.g. to plt.errorbar(x, y, e, linestyle='None', marker='^', capsize=3) – Andy R Nov 20 '17 at 21:43
20
You may find an answer with this example : errorbar_demo_features.py
"""
Demo of errorbar function with different ways of specifying error bars.
Errors can be specified as a constant value (as shown in `errorbar_demo.py`),
or as demonstrated in this example, they can be specified by an N x 1 or 2 x N,
where N is the number of data points.
N x 1:
Error varies for each point, but the error values are symmetric (i.e. the
lower and upper values are equal).
2 x N:
Error varies for each point, and the lower and upper limits (in that order)
are different (asymmetric case)
In addition, this example demonstrates how to use log scale with errorbar.
"""
import numpy as np
import matplotlib.pyplot as plt
# example data
x = np.arange(0.1, 4, 0.5)
y = np.exp(-x)
# example error bar values that vary with x-position
error = 0.1 + 0.2 * x
# error bar values w/ different -/+ errors
lower_error = 0.4 * error
upper_error = error
asymmetric_error = [lower_error, upper_error]
fig, (ax0, ax1) = plt.subplots(nrows=2, sharex=True)
ax0.errorbar(x, y, yerr=error, fmt='-o')
ax0.set_title('variable, symmetric error')
ax1.errorbar(x, y, xerr=asymmetric_error, fmt='o')
ax1.set_title('variable, asymmetric error')
ax1.set_yscale('log')
plt.show()
Which plots this:

Cristiano Araujo
- 1,632
- 2
- 21
- 32

Kiwi
- 2,698
- 16
- 15
-
3It would be extremely better if you posted the relevant code here, not just a link. – Christian Tapia Mar 18 '14 at 14:15
-
It's great.. however I am not getting the '-' at the end of the deviation :-( (May be some versioning issue) – user1953366 Jun 26 '22 at 06:26
-
@Andi_R's comment on the accepted answer explains how to add the '-' Here is a copy: To add those small horizontal lines on the top and the bottom of a candle, specify the capsize option. E.g. to plt.errorbar(x, y, e, linestyle='None', marker='^', capsize=3) – Carlos Hernandez Perez Apr 03 '23 at 17:47