Source code for plotnine.geoms.geom_label

from __future__ import annotations

import typing

from ..doctools import document
from ..utils import to_rgba
from .geom_text import geom_text

if typing.TYPE_CHECKING:
    from typing import Any

    import pandas as pd

    from plotnine.typing import DrawingArea, Layer


_aes = geom_text.DEFAULT_AES.copy()
_aes["fill"] = "white"

_params = geom_text.DEFAULT_PARAMS.copy()
_params.update(
    {
        # boxstyle is one of
        #   cirle, larrow, rarrow, round, round4,
        #   roundtooth, sawtooth, square
        #
        # Documentation at matplotlib.patches.BoxStyle
        "boxstyle": "round",
        "boxcolor": None,
        "label_padding": 0.25,
        "label_r": 0.25,
        "label_size": 0.7,
        "tooth_size": None,
    }
)


[docs]@document class geom_label(geom_text): """ Textual annotations with a background {usage} Parameters ---------- {common_parameters} boxstyle : str, optional (default: round) Options are:: 'circle' 'darrow' 'larrow' 'rarrow' 'round ' 'round4' 'roundtooth' 'sawtooth' 'square' boxcolor: None, str or rgba tuple (default: None) Color of box around the text. If None, the color is the same as the text. label_padding : float, optional (default: 0.25) Amount of padding label_r : float, optional (default: 0.25) Rounding radius of corners. label_size : float, optional (default: 0.7) Linewidth of the label boundary. tooth_size : float, optional (default: None) Size of the ``roundtooth`` or ``sawtooth`` if they are the chosen *boxstyle*. The default depends on Matplotlib See Also -------- plotnine.geoms.geom_text : For documentation of the parameters. :class:`matplotlib.patches.BoxStyle` for the parameters that affect the boxstyle. """ DEFAULT_AES = _aes DEFAULT_PARAMS = _params @staticmethod def draw_legend( data: pd.Series[Any], da: DrawingArea, lyr: Layer ) -> DrawingArea: """ Draw letter 'a' in the box Parameters ---------- data : Series Data Row da : DrawingArea Canvas lyr : layer Layer Returns ------- out : DrawingArea """ from matplotlib.patches import Rectangle fill = to_rgba(data["fill"], data["alpha"]) if data["fill"]: rect = Rectangle( (0, 0), width=da.width, height=da.height, linewidth=0, facecolor=fill, capstyle="projecting", ) da.add_artist(rect) return geom_text.draw_legend(data, da, lyr)