Source code for plotnine.coords.coord_fixed

from __future__ import annotations

import typing

from .coord_cartesian import coord_cartesian

if typing.TYPE_CHECKING:
    from typing import Optional

    from plotnine.iapi import panel_view
    from plotnine.typing import TupleFloat2


[docs]class coord_fixed(coord_cartesian): """ Cartesian coordinates with fixed relationship between x and y scales Parameters ---------- ratio : float Desired aspect_ratio (:math:`y/x`) of the panel(s). Default is 1. xlim : None | (float, float) Limits for x axis. If None, then they are automatically computed. ylim : None | (float, float) Limits for y axis. If None, then they are automatically computed. expand : bool If `True`, expand the coordinate axes by some factor. If `False`, use the limits from the data. Notes ----- To specify aspect ratio of the visual size for the axes use the :class:`~plotnine.themes.themeable.aspect_ratio` themeable:: ggplot(data, aes('x', 'y')) + theme(aspect_ratio=0.5) When changing the `aspect_ratio` in either way, the `width` of the panel remains constant (as derived from the :class:`plotnine.themes.themeable.figure_size` themeable) and the `height` is altered to achieve desired ratio. """ ratio: float def __init__( self, ratio: float = 1, xlim: Optional[TupleFloat2] = None, ylim: Optional[TupleFloat2] = None, expand: bool = True, ): super().__init__(xlim=xlim, ylim=ylim, expand=expand) self.ratio = ratio def aspect(self, panel_params: panel_view) -> float | None: x = panel_params.x.range y = panel_params.y.range return (y[1] - y[0]) / (x[1] - x[0]) * self.ratio
coord_equal = coord_fixed