def kde()

in chartify/_core/plot.py [0:0]


    def kde(self, data_frame, values_column, color_column=None, color_order=None):
        """Kernel Density Estimate Plot.

        Args:
            data_frame (pandas.DataFrame): Data source for the plot.
            values_column (str): Column of numeric values.
            color_column (str, optional): Column name to group by on
                the color dimension.
            color_order (list, optional): List of values within the
                'color_column' for specific sorting of the colors.
        """
        # Vertical is unused since the logic is handled
        # by the area chart
        # vertical = self._chart.axes._vertical

        if color_column is not None:
            color_values = sorted(data_frame[color_column].unique())
        else:
            color_values = [None]

        data = pd.DataFrame()
        for color_value in color_values:
            if color_column is None:  # Single line
                sliced_data = data_frame
            else:
                sliced_data = data_frame[data_frame[color_column] == color_value]
            values = sliced_data[values_column]

            kde = gaussian_kde(values)
            index = np.linspace(values.min(), values.max(), 300)
            kde_pdf = kde.evaluate(index)
            data = pd.concat(
                [data, pd.DataFrame({"x": index, "y": kde_pdf, "color": color_value})],
                axis=0,
            )

        color_column = "color" if color_column is not None else None

        PlotNumericXY.area(
            self,
            data,
            "x",
            "y",
            color_column=color_column,
            color_order=color_values,
            stacked=False,
        )

        return self._chart