docs: def sitespeptidesproteins(df, labels=None, colors=None, site_localization_probability=0.75):
      """
      Plot the number of sites, peptides and proteins in the dataset.
  
      Generates a plot with sites, peptides and proteins displayed hierarchically in chevrons.
      The site count is limited to Class I (<=0.75 site localization probability) by default
      but may be altered using the `site_localization_probability` parameter.
  
      Labels and alternate colours may be supplied as a 3-entry iterable.
  
      :param df: pandas DataFrame to calculate numbers from
      :param labels: list/tuple of 3 strings containing labels
      :param colors: list/tuple of 3 colours as hex codes or matplotlib color codes
      :param site_localization_probability: the cut-off for site inclusion (default=0.75; Class I)
      :return:
      """
      fig = plt.figure(figsize=(4,6))
      ax = fig.add_subplot(1,1,1)
  
      shift = 0.5
      values = analysis.sitespeptidesproteins(df, site_localization_probability)
      if labels is None:
          labels = ['Sites (Class I)', 'Peptides', 'Proteins']
      if colors is None:
          colors = ['#756bb1', '#bcbddc', '#dadaeb']
  
      for n, (c, l, v) in enumerate(zip(colors, labels, values)):
          ax.fill_between([0,1,2], np.array([shift,0,shift]) + n, np.array([1+shift,1,1+shift]) + n, color=c, alpha=0.5 )
  
          ax.text(1, 0.5 + n, "{}\n{:,}".format(l, v), ha='center', color='k', fontsize=16 )
          
      ax.set_xticks([])
      ax.set_yticks([])
      ax.set_axis_off()
      
      return ax