def _multiple_difference_joint_plot()

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