code: def plot_holdings(returns, positions, legend_loc='best', ax=None, **kwargs):
      
  
      if ax is None:
          ax = plt.gca()
  
      positions = positions.copy().drop('cash', axis='columns')
      df_holdings = positions.replace(0, np.nan).count(axis=1)
      df_holdings_by_month = df_holdings.resample('1M').mean()
      df_holdings.plot(color='steelblue', alpha=0.6, lw=0.5, ax=ax, **kwargs)
      df_holdings_by_month.plot(
          color='orangered',
          lw=2,
          ax=ax,
          **kwargs)
      ax.axhline(
          df_holdings.values.mean(),
          color='steelblue',
          ls='--',
          lw=3)
  
      ax.set_xlim((returns.index[0], returns.index[-1]))
  
      leg = ax.legend(['Daily holdings',
                       'Average daily holdings, by month',
                       'Average daily holdings, overall'],
                      loc=legend_loc, frameon=True,
                      framealpha=0.5)
      leg.get_frame().set_edgecolor('black')
  
      ax.set_title('Total holdings')
      ax.set_ylabel('Holdings')
      ax.set_xlabel('')
      return ax
docs: Plots total amount of stocks with an active position, either short
      or long. Displays daily total, daily average per month, and
      all-time daily average.
  
      Parameters
      ----------
      returns : pd.Series
          Daily returns of the strategy, noncumulative.
           - See full explanation in tears.create_full_tear_sheet.
      positions : pd.DataFrame, optional
          Daily net position values.
           - See full explanation in tears.create_full_tear_sheet.
      legend_loc : matplotlib.loc, optional
          The location of the legend on the plot.
      ax : matplotlib.Axes, optional
          Axes upon which to plot.
      **kwargs, optional
          Passed to plotting function.
  
      Returns
      -------
      ax : matplotlib.Axes
          The axes that were plotted on.