code: def plot_ic_qq(ic, theoretical_dist=stats.norm, ax=None):
      
  
      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()
  
      if isinstance(theoretical_dist, stats.norm.__class__):
          dist_name = 'Normal'
      elif isinstance(theoretical_dist, stats.t.__class__):
          dist_name = 'T'
      else:
          dist_name = 'Theoretical'
  
      for a, (period_num, ic) in zip(ax, ic.iteritems()):
          sm.qqplot(ic.replace(np.nan, 0.).values, theoretical_dist, fit=True,
                    line='45', ax=a)
          a.set(title="{} Period IC {} Dist. Q-Q".format(
                period_num, dist_name),
                ylabel='Observed Quantile',
                xlabel='{} Distribution Quantile'.format(dist_name))
  
      return ax
docs: Plots Spearman Rank Information Coefficient "Q-Q" plot relative to
      a theoretical distribution.
  
      Parameters
      ----------
      ic : pd.DataFrame
          DataFrame indexed by date, with IC for each forward return.
      theoretical_dist : scipy.stats._continuous_distns
          Continuous distribution generator. scipy.stats.norm and
          scipy.stats.t are popular options.
      ax : matplotlib.Axes, optional
          Axes upon which to plot.
  
      Returns
      -------
      ax : matplotlib.Axes
          The axes that were plotted on.