Source code for plotnine.stats.stat_hull

import numpy as np
import pandas as pd

from ..doctools import document
from .stat import stat


[docs]@document class stat_hull(stat): """ 2 Dimensional Convex Hull {usage} Parameters ---------- {common_parameters} qhull_options: str, optional Additional options to pass to Qhull. See `Qhull <http://www.qhull.org/>`__ documentation for details. Raises ------ QhullError Raised when Qhull encounters an error condition, such as geometrical degeneracy when options to resolve are not enabled. """ _aesthetics_doc = """ {aesthetics_table} .. rubric:: Options for computed aesthetics :: 'area' # Area of the convex hull """ REQUIRED_AES = {"x", "y"} DEFAULT_PARAMS = { "geom": "path", "position": "identity", "na_rm": False, "qhull_options": None, } CREATES = {"area"} @classmethod def compute_group(cls, data, scales, **params): from scipy.spatial import ConvexHull hull = ConvexHull( data[["x", "y"]], qhull_options=params["qhull_options"] ) idx = np.hstack([hull.vertices, hull.vertices[0]]) new_data = pd.DataFrame( { "x": data["x"].iloc[idx].values, "y": data["y"].iloc[idx].values, "area": hull.area, } ) return new_data