text: import numpy as np
  import matplotlib.pyplot as plt
  from matplotlib import collections, colors, transforms
  
  plt.style.use('./CT_style.mplstyle')
  
  
  np.random.seed(0)
  
  n_bins = 10
  x = np.random.randn(1000, 3)
  
  fig, axes = plt.subplots(nrows=2, ncols=2)
  ax0, ax1, ax2, ax3 = axes.flatten()
  
  colors = ['red', 'tan', 'lime']
  ax0.hist(x, n_bins, normed=1, histtype='bar', label=colors)
  ax0.legend()
  ax0.set_title('Bars with legend')
  
  ax1.hist(x, n_bins, normed=1, histtype='bar', stacked=True)
  ax1.set_title('Stacked bar')
  
  ax2.hist(x, n_bins, histtype='step', stacked=True, fill=False)
  ax2.set_title('Stack step (unfilled)')
  
  # Make a multiple-histogram of data-sets with different length.
  x_multi = [np.random.randn(n) for n in [10000, 5000, 2000]]
  ax3.hist(x_multi, n_bins, histtype='bar')
  ax3.set_title('Different sample sizes')
  
  fig.tight_layout()
  plt.show()
  
  
  
  # example data
  x = np.array([0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0])
  y = np.exp(-x)
  xerr = 0.1
  yerr = 0.2
  
  # lower & upper limits of the error
  lolims = np.array([0, 0, 1, 0, 1, 0, 0, 0, 1, 0], dtype=bool)
  uplims = np.array([0, 1, 0, 0, 0, 1, 0, 0, 0, 1], dtype=bool)
  # ls = 'dotted'
  
  fig, ax = plt.subplots(figsize=(7, 4))
  
  # standard error bars
  ax.errorbar(x, y, xerr=xerr, yerr=yerr)
  
  # including upper limits
  ax.errorbar(x, y + 0.5, xerr=xerr, yerr=yerr, uplims=uplims)
  
  # including lower limits
  ax.errorbar(x, y + 1.0, xerr=xerr, yerr=yerr, lolims=lolims) # linestyle=ls
  
  # including upper and lower limits
  ax.errorbar(x, y + 1.5, xerr=xerr, yerr=yerr,
              lolims=lolims, uplims=uplims,
              marker='o') # inestyle=ls
  
  # Plot a series with lower and upper limits in both x & y
  # constant x-error with varying y-error
  xerr = 0.2
  yerr = np.zeros_like(x) + 0.2
  yerr[[3, 6]] = 0.3
  
  # mock up some limits by modifying previous data
  xlolims = lolims
  xuplims = uplims
  lolims = np.zeros(x.shape)
  uplims = np.zeros(x.shape)
  lolims[[6]] = True  # only limited at this index
  uplims[[3]] = True  # only limited at this index
  
  # do the plotting
  ax.errorbar(x, y + 2.1, xerr=xerr, yerr=yerr,
              xlolims=xlolims, xuplims=xuplims,
              uplims=uplims, lolims=lolims,
              marker='o',
              linestyle='none') # markersize=8,
  
  # tidy up the figure
  ax.set_xlim((0, 5.5))
  ax.set_xlabel("This is the X Axis")
  ax.set_ylabel("This is the Y Axis")
  ax.set_title('Errorbar upper and lower limits')
  plt.show()
  
  
  