diff --git a/examples/statistics/errorbars_and_boxes.py b/examples/statistics/errorbars_and_boxes.py new file mode 100644 index 000000000000..a0a421640c58 --- /dev/null +++ b/examples/statistics/errorbars_and_boxes.py @@ -0,0 +1,48 @@ +''' +Example to create boxes from error using PatchCollection +''' + +import numpy as np +import matplotlib.pyplot as plt +from matplotlib.collections import PatchCollection +from matplotlib.patches import Rectangle + +# Number of data points +n = 5 + +# Dummy data +x = np.arange(0, n, 1) +y = np.random.rand(n)*5. + +# Dummy errors (above and below) +xerr = np.random.rand(2, n) +yerr = np.random.rand(2, n) + +# Create figure and axes +fig, ax = plt.subplots(1) + + +def make_error_boxes(ax, xdata, ydata, xerror, yerror, fc='r', ec='None', alpha=0.5): + + # Create list for all the error patches + errorboxes = [] + + # Loop over data points; create box from errors at each point + for xc, yc, xe, ye in zip(xdata, ydata, xerror.T, yerror.T): + rect = Rectangle((xc-xe[0], yc-ye[0]), xe.sum(), ye.sum()) + errorboxes.append(rect) + + # Create patch collection with specified colour/alpha + pc = PatchCollection(errorboxes, facecolor=fc, alpha=alpha, edgecolor=ec) + + # Add collection to axes + ax.add_collection(pc) + + # Plot errorbars + ax.errorbar(xdata, ydata, xerr=xerror, yerr=yerror, fmt='None', ecolor='k') + + +# Call function to create error boxes +make_error_boxes(ax, x, y, xerr, yerr) + +plt.show()