Source code for plotnine_extra.stats.stat_funxy

"""
``stat_funxy``: apply arbitrary summary functions to ``x`` and
``y`` separately. Port of ``ggh4x::stat_funxy``.
"""

from __future__ import annotations

from typing import Callable

import numpy as np
import pandas as pd
from plotnine.doctools import document
from plotnine.stats.stat import stat


[docs] @document class stat_funxy(stat): """ Reduce each group's x and y to scalar values via callables. {usage} Parameters ---------- {common_parameters} funx : callable, default :func:`numpy.mean` Reduction applied to ``x``. funy : callable, default :func:`numpy.mean` Reduction applied to ``y``. """ REQUIRED_AES = {"x", "y"} DEFAULT_PARAMS = { "geom": "point", "position": "identity", "na_rm": False, "funx": np.mean, "funy": np.mean, }
[docs] def compute_group(self, data, scales) -> pd.DataFrame: funx: Callable = self.params["funx"] funy: Callable = self.params["funy"] return pd.DataFrame( { "x": [float(funx(data["x"].to_numpy(dtype=float)))], "y": [float(funy(data["y"].to_numpy(dtype=float)))], } )