in spotify_confidence/analysis/bayesian/bayesian_models.py [0:0]
def _multiple_difference_joint_plot(self, level_name, level_df, remaining_groups, groupby, level, absolute):
self._validate_levels(level_df, remaining_groups, level)
difference_df, difference_posterior = self._multiple_difference_joint_base(
level_name, level_df, remaining_groups, groupby, level, absolute
)
posterior_mean = difference_df.loc[:, "difference"].values[0]
# potential_loss = difference_df.loc[:, '{} potential loss'.format(
# level)].values[0]
# Take the difference posterior and create a chart
df = pd.DataFrame({"values": difference_posterior})
ch = chartify.Chart(y_axis_type="density", x_axis_type="linear")
ch.plot.kde(df, "values")
ch.set_title("Comparison to {}".format(level))
subtitle = "" if not groupby else "{}: {}".format(groupby, level_name)
ch.set_subtitle(subtitle)
# Line at no difference
ch.callout.line(0, orientation="height", line_color="black")
# Plot callout for the mean
ch.callout.line(posterior_mean, orientation="height", line_color=ch.style.color_palette._colors[0])
ch.callout.text(
f"Expected change: {posterior_mean:{format_str_precision(posterior_mean, absolute=False)}}",
posterior_mean,
0,
angle=90,
)
ch.set_source_label("")
ch.axes.set_yaxis_range(0)
ch.axes.set_xaxis_label(self.get_difference_plot_label(absolute))
ch.axes.set_yaxis_label("Probability Density")
ch.axes.hide_yaxis()
axis_format = axis_format_precision(df["values"].max() * 10, df["values"].min() * 10, absolute)
ch.axes.set_xaxis_tick_format(axis_format)
return ch