docs: def plot_ic_hist(ic, ax=None):
      """
      Plots Spearman Rank Information Coefficient histogram for a given factor.
  
      Parameters
      ----------
      ic : pd.DataFrame
          DataFrame indexed by date, with IC for each forward return.
      ax : matplotlib.Axes, optional
          Axes upon which to plot.
  
      Returns
      -------
      ax : matplotlib.Axes
          The axes that were plotted on.
      """
  
      ic = ic.copy()
  
      num_plots = len(ic.columns)
  
      v_spaces = ((num_plots - 1) // 3) + 1
  
      if ax is None:
          f, ax = plt.subplots(v_spaces, 3, figsize=(18, v_spaces * 6))
          ax = ax.flatten()
  
      for a, (period_num, ic) in zip(ax, ic.iteritems()):
          sns.distplot(ic.replace(np.nan, 0.), norm_hist=True, ax=a)
          a.set(title="%s Period IC" % period_num, xlabel='IC')
          a.set_xlim([-1, 1])
          a.text(.05, .95, "Mean %.3f \n Std. %.3f" % (ic.mean(), ic.std()),
                 fontsize=16,
                 bbox={'facecolor': 'white', 'alpha': 1, 'pad': 5},
                 transform=a.transAxes,
                 verticalalignment='top')
          a.axvline(ic.mean(), color='w', linestyle='dashed', linewidth=2)
  
      if num_plots < len(ax):
          ax[-1].set_visible(False)
  
      return ax