def plot_return_quantiles(returns, live_start_date=None, ax=None, **kwargs):
if ax is None:<EOL><INDENT>ax = plt.gca()<EOL><DEDENT>is_returns = returns if live_start_date is Noneelse returns.loc[returns.index < live_start_date]<EOL>is_weekly = ep.aggregate_returns(is_returns, '<STR_LIT>')<EOL>is_monthly = ep.aggregate_returns(is_returns, '<STR_LIT>')<EOL>sns.boxplot(data=[is_returns, is_weekly, is_monthly],<EOL>palette=["<STR_LIT>", "<STR_LIT>", "<STR_LIT>"],<EOL>ax=ax, **kwargs)<EOL>if live_start_date is not None:<EOL><INDENT>oos_returns = returns.loc[returns.index >= live_start_date]<EOL>oos_weekly = ep.aggregate_returns(oos_returns, '<STR_LIT>')<EOL>oos_monthly = ep.aggregate_returns(oos_returns, '<STR_LIT>')<EOL>sns.swarmplot(data=[oos_returns, oos_weekly, oos_monthly], ax=ax,<EOL>color="<STR_LIT>",<EOL>marker="<STR_LIT:d>", **kwargs)<EOL>red_dots = matplotlib.lines.Line2D([], [], color="<STR_LIT>", marker="<STR_LIT:d>",<EOL>label="<STR_LIT>",<EOL>linestyle='<STR_LIT>')<EOL>ax.legend(handles=[red_dots], frameon=True, framealpha=<NUM_LIT:0.5>)<EOL><DEDENT>ax.set_xticklabels(['<STR_LIT>', '<STR_LIT>', '<STR_LIT>'])<EOL>ax.set_title('<STR_LIT>')<EOL>return ax<EOL>
Creates a box plot of daily, weekly, and monthly return
distributions.

Parameters
----------
returns : pd.Series
    Daily returns of the strategy, noncumulative.
     - See full explanation in tears.create_full_tear_sheet.
live_start_date : datetime, optional
    The point in time when the strategy began live trading, after
    its backtest period.
ax : matplotlib.Axes, optional
    Axes upon which to plot.
**kwargs, optional
    Passed to seaborn plotting function.

Returns
-------
ax : matplotlib.Axes
    The axes that were plotted on.