diff options
author | maxim-yurchuk <maxim-yurchuk@yandex-team.com> | 2025-02-11 13:26:52 +0300 |
---|---|---|
committer | maxim-yurchuk <maxim-yurchuk@yandex-team.com> | 2025-02-11 13:57:59 +0300 |
commit | f895bba65827952ed934b2b46f9a45e30a191fd2 (patch) | |
tree | 03260c906d9ec41cdc03e2a496b15d407459cec0 /contrib/python/matplotlib/py3/mpl_toolkits/axes_grid1/axes_grid.py | |
parent | 5f7060466f7b9707818c2091e1a25c14f33c3474 (diff) | |
download | ydb-f895bba65827952ed934b2b46f9a45e30a191fd2.tar.gz |
Remove deps on pandas
<https://github.com/ydb-platform/ydb/pull/14418>
<https://github.com/ydb-platform/ydb/pull/14419>
\-- аналогичные правки в gh
Хочу залить в обход синка, чтобы посмотреть удалится ли pandas в нашей gh репе через piglet
commit_hash:abca127aa37d4dbb94b07e1e18cdb8eb5b711860
Diffstat (limited to 'contrib/python/matplotlib/py3/mpl_toolkits/axes_grid1/axes_grid.py')
-rw-r--r-- | contrib/python/matplotlib/py3/mpl_toolkits/axes_grid1/axes_grid.py | 550 |
1 files changed, 0 insertions, 550 deletions
diff --git a/contrib/python/matplotlib/py3/mpl_toolkits/axes_grid1/axes_grid.py b/contrib/python/matplotlib/py3/mpl_toolkits/axes_grid1/axes_grid.py deleted file mode 100644 index 720d985414f..00000000000 --- a/contrib/python/matplotlib/py3/mpl_toolkits/axes_grid1/axes_grid.py +++ /dev/null @@ -1,550 +0,0 @@ -from numbers import Number -import functools -from types import MethodType - -import numpy as np - -from matplotlib import _api, cbook -from matplotlib.gridspec import SubplotSpec - -from .axes_divider import Size, SubplotDivider, Divider -from .mpl_axes import Axes, SimpleAxisArtist - - -class CbarAxesBase: - def __init__(self, *args, orientation, **kwargs): - self.orientation = orientation - super().__init__(*args, **kwargs) - - def colorbar(self, mappable, **kwargs): - return self.figure.colorbar( - mappable, cax=self, location=self.orientation, **kwargs) - - @_api.deprecated("3.8", alternative="ax.tick_params and colorbar.set_label") - def toggle_label(self, b): - axis = self.axis[self.orientation] - axis.toggle(ticklabels=b, label=b) - - -_cbaraxes_class_factory = cbook._make_class_factory(CbarAxesBase, "Cbar{}") - - -class Grid: - """ - A grid of Axes. - - In Matplotlib, the Axes location (and size) is specified in normalized - figure coordinates. This may not be ideal for images that needs to be - displayed with a given aspect ratio; for example, it is difficult to - display multiple images of a same size with some fixed padding between - them. AxesGrid can be used in such case. - """ - - _defaultAxesClass = Axes - - def __init__(self, fig, - rect, - nrows_ncols, - ngrids=None, - direction="row", - axes_pad=0.02, - *, - share_all=False, - share_x=True, - share_y=True, - label_mode="L", - axes_class=None, - aspect=False, - ): - """ - Parameters - ---------- - fig : `.Figure` - The parent figure. - rect : (float, float, float, float), (int, int, int), int, or \ - `~.SubplotSpec` - The axes position, as a ``(left, bottom, width, height)`` tuple, - as a three-digit subplot position code (e.g., ``(1, 2, 1)`` or - ``121``), or as a `~.SubplotSpec`. - nrows_ncols : (int, int) - Number of rows and columns in the grid. - ngrids : int or None, default: None - If not None, only the first *ngrids* axes in the grid are created. - direction : {"row", "column"}, default: "row" - Whether axes are created in row-major ("row by row") or - column-major order ("column by column"). This also affects the - order in which axes are accessed using indexing (``grid[index]``). - axes_pad : float or (float, float), default: 0.02 - Padding or (horizontal padding, vertical padding) between axes, in - inches. - share_all : bool, default: False - Whether all axes share their x- and y-axis. Overrides *share_x* - and *share_y*. - share_x : bool, default: True - Whether all axes of a column share their x-axis. - share_y : bool, default: True - Whether all axes of a row share their y-axis. - label_mode : {"L", "1", "all", "keep"}, default: "L" - Determines which axes will get tick labels: - - - "L": All axes on the left column get vertical tick labels; - all axes on the bottom row get horizontal tick labels. - - "1": Only the bottom left axes is labelled. - - "all": All axes are labelled. - - "keep": Do not do anything. - - axes_class : subclass of `matplotlib.axes.Axes`, default: None - aspect : bool, default: False - Whether the axes aspect ratio follows the aspect ratio of the data - limits. - """ - self._nrows, self._ncols = nrows_ncols - - if ngrids is None: - ngrids = self._nrows * self._ncols - else: - if not 0 < ngrids <= self._nrows * self._ncols: - raise ValueError( - "ngrids must be positive and not larger than nrows*ncols") - - self.ngrids = ngrids - - self._horiz_pad_size, self._vert_pad_size = map( - Size.Fixed, np.broadcast_to(axes_pad, 2)) - - _api.check_in_list(["column", "row"], direction=direction) - self._direction = direction - - if axes_class is None: - axes_class = self._defaultAxesClass - elif isinstance(axes_class, (list, tuple)): - cls, kwargs = axes_class - axes_class = functools.partial(cls, **kwargs) - - kw = dict(horizontal=[], vertical=[], aspect=aspect) - if isinstance(rect, (Number, SubplotSpec)): - self._divider = SubplotDivider(fig, rect, **kw) - elif len(rect) == 3: - self._divider = SubplotDivider(fig, *rect, **kw) - elif len(rect) == 4: - self._divider = Divider(fig, rect, **kw) - else: - raise TypeError("Incorrect rect format") - - rect = self._divider.get_position() - - axes_array = np.full((self._nrows, self._ncols), None, dtype=object) - for i in range(self.ngrids): - col, row = self._get_col_row(i) - if share_all: - sharex = sharey = axes_array[0, 0] - else: - sharex = axes_array[0, col] if share_x else None - sharey = axes_array[row, 0] if share_y else None - axes_array[row, col] = axes_class( - fig, rect, sharex=sharex, sharey=sharey) - self.axes_all = axes_array.ravel( - order="C" if self._direction == "row" else "F").tolist() - self.axes_column = axes_array.T.tolist() - self.axes_row = axes_array.tolist() - self.axes_llc = self.axes_column[0][-1] - - self._init_locators() - - for ax in self.axes_all: - fig.add_axes(ax) - - self.set_label_mode(label_mode) - - def _init_locators(self): - self._divider.set_horizontal( - [Size.Scaled(1), self._horiz_pad_size] * (self._ncols-1) + [Size.Scaled(1)]) - self._divider.set_vertical( - [Size.Scaled(1), self._vert_pad_size] * (self._nrows-1) + [Size.Scaled(1)]) - for i in range(self.ngrids): - col, row = self._get_col_row(i) - self.axes_all[i].set_axes_locator( - self._divider.new_locator(nx=2 * col, ny=2 * (self._nrows - 1 - row))) - - def _get_col_row(self, n): - if self._direction == "column": - col, row = divmod(n, self._nrows) - else: - row, col = divmod(n, self._ncols) - - return col, row - - # Good to propagate __len__ if we have __getitem__ - def __len__(self): - return len(self.axes_all) - - def __getitem__(self, i): - return self.axes_all[i] - - def get_geometry(self): - """ - Return the number of rows and columns of the grid as (nrows, ncols). - """ - return self._nrows, self._ncols - - def set_axes_pad(self, axes_pad): - """ - Set the padding between the axes. - - Parameters - ---------- - axes_pad : (float, float) - The padding (horizontal pad, vertical pad) in inches. - """ - self._horiz_pad_size.fixed_size = axes_pad[0] - self._vert_pad_size.fixed_size = axes_pad[1] - - def get_axes_pad(self): - """ - Return the axes padding. - - Returns - ------- - hpad, vpad - Padding (horizontal pad, vertical pad) in inches. - """ - return (self._horiz_pad_size.fixed_size, - self._vert_pad_size.fixed_size) - - def set_aspect(self, aspect): - """Set the aspect of the SubplotDivider.""" - self._divider.set_aspect(aspect) - - def get_aspect(self): - """Return the aspect of the SubplotDivider.""" - return self._divider.get_aspect() - - def set_label_mode(self, mode): - """ - Define which axes have tick labels. - - Parameters - ---------- - mode : {"L", "1", "all", "keep"} - The label mode: - - - "L": All axes on the left column get vertical tick labels; - all axes on the bottom row get horizontal tick labels. - - "1": Only the bottom left axes is labelled. - - "all": All axes are labelled. - - "keep": Do not do anything. - """ - is_last_row, is_first_col = ( - np.mgrid[:self._nrows, :self._ncols] == [[[self._nrows - 1]], [[0]]]) - if mode == "all": - bottom = left = np.full((self._nrows, self._ncols), True) - elif mode == "L": - bottom = is_last_row - left = is_first_col - elif mode == "1": - bottom = left = is_last_row & is_first_col - else: - # Use _api.check_in_list at the top of the method when deprecation - # period expires - if mode != 'keep': - _api.warn_deprecated( - '3.7', name="Grid label_mode", - message='Passing an undefined label_mode is deprecated ' - 'since %(since)s and will become an error ' - '%(removal)s. To silence this warning, pass ' - '"keep", which gives the same behaviour.') - return - for i in range(self._nrows): - for j in range(self._ncols): - ax = self.axes_row[i][j] - if isinstance(ax.axis, MethodType): - bottom_axis = SimpleAxisArtist(ax.xaxis, 1, ax.spines["bottom"]) - left_axis = SimpleAxisArtist(ax.yaxis, 1, ax.spines["left"]) - else: - bottom_axis = ax.axis["bottom"] - left_axis = ax.axis["left"] - bottom_axis.toggle(ticklabels=bottom[i, j], label=bottom[i, j]) - left_axis.toggle(ticklabels=left[i, j], label=left[i, j]) - - def get_divider(self): - return self._divider - - def set_axes_locator(self, locator): - self._divider.set_locator(locator) - - def get_axes_locator(self): - return self._divider.get_locator() - - -class ImageGrid(Grid): - """ - A grid of Axes for Image display. - - This class is a specialization of `~.axes_grid1.axes_grid.Grid` for displaying a - grid of images. In particular, it forces all axes in a column to share their x-axis - and all axes in a row to share their y-axis. It further provides helpers to add - colorbars to some or all axes. - """ - - def __init__(self, fig, - rect, - nrows_ncols, - ngrids=None, - direction="row", - axes_pad=0.02, - *, - share_all=False, - aspect=True, - label_mode="L", - cbar_mode=None, - cbar_location="right", - cbar_pad=None, - cbar_size="5%", - cbar_set_cax=True, - axes_class=None, - ): - """ - Parameters - ---------- - fig : `.Figure` - The parent figure. - rect : (float, float, float, float) or int - The axes position, as a ``(left, bottom, width, height)`` tuple or - as a three-digit subplot position code (e.g., "121"). - nrows_ncols : (int, int) - Number of rows and columns in the grid. - ngrids : int or None, default: None - If not None, only the first *ngrids* axes in the grid are created. - direction : {"row", "column"}, default: "row" - Whether axes are created in row-major ("row by row") or - column-major order ("column by column"). This also affects the - order in which axes are accessed using indexing (``grid[index]``). - axes_pad : float or (float, float), default: 0.02in - Padding or (horizontal padding, vertical padding) between axes, in - inches. - share_all : bool, default: False - Whether all axes share their x- and y-axis. Note that in any case, - all axes in a column share their x-axis and all axes in a row share - their y-axis. - aspect : bool, default: True - Whether the axes aspect ratio follows the aspect ratio of the data - limits. - label_mode : {"L", "1", "all"}, default: "L" - Determines which axes will get tick labels: - - - "L": All axes on the left column get vertical tick labels; - all axes on the bottom row get horizontal tick labels. - - "1": Only the bottom left axes is labelled. - - "all": all axes are labelled. - - cbar_mode : {"each", "single", "edge", None}, default: None - Whether to create a colorbar for "each" axes, a "single" colorbar - for the entire grid, colorbars only for axes on the "edge" - determined by *cbar_location*, or no colorbars. The colorbars are - stored in the :attr:`cbar_axes` attribute. - cbar_location : {"left", "right", "bottom", "top"}, default: "right" - cbar_pad : float, default: None - Padding between the image axes and the colorbar axes. - cbar_size : size specification (see `.Size.from_any`), default: "5%" - Colorbar size. - cbar_set_cax : bool, default: True - If True, each axes in the grid has a *cax* attribute that is bound - to associated *cbar_axes*. - axes_class : subclass of `matplotlib.axes.Axes`, default: None - """ - _api.check_in_list(["each", "single", "edge", None], - cbar_mode=cbar_mode) - _api.check_in_list(["left", "right", "bottom", "top"], - cbar_location=cbar_location) - self._colorbar_mode = cbar_mode - self._colorbar_location = cbar_location - self._colorbar_pad = cbar_pad - self._colorbar_size = cbar_size - # The colorbar axes are created in _init_locators(). - - super().__init__( - fig, rect, nrows_ncols, ngrids, - direction=direction, axes_pad=axes_pad, - share_all=share_all, share_x=True, share_y=True, aspect=aspect, - label_mode=label_mode, axes_class=axes_class) - - for ax in self.cbar_axes: - fig.add_axes(ax) - - if cbar_set_cax: - if self._colorbar_mode == "single": - for ax in self.axes_all: - ax.cax = self.cbar_axes[0] - elif self._colorbar_mode == "edge": - for index, ax in enumerate(self.axes_all): - col, row = self._get_col_row(index) - if self._colorbar_location in ("left", "right"): - ax.cax = self.cbar_axes[row] - else: - ax.cax = self.cbar_axes[col] - else: - for ax, cax in zip(self.axes_all, self.cbar_axes): - ax.cax = cax - - def _init_locators(self): - # Slightly abusing this method to inject colorbar creation into init. - - if self._colorbar_pad is None: - # horizontal or vertical arrangement? - if self._colorbar_location in ("left", "right"): - self._colorbar_pad = self._horiz_pad_size.fixed_size - else: - self._colorbar_pad = self._vert_pad_size.fixed_size - self.cbar_axes = [ - _cbaraxes_class_factory(self._defaultAxesClass)( - self.axes_all[0].figure, self._divider.get_position(), - orientation=self._colorbar_location) - for _ in range(self.ngrids)] - - cb_mode = self._colorbar_mode - cb_location = self._colorbar_location - - h = [] - v = [] - - h_ax_pos = [] - h_cb_pos = [] - if cb_mode == "single" and cb_location in ("left", "bottom"): - if cb_location == "left": - sz = self._nrows * Size.AxesX(self.axes_llc) - h.append(Size.from_any(self._colorbar_size, sz)) - h.append(Size.from_any(self._colorbar_pad, sz)) - locator = self._divider.new_locator(nx=0, ny=0, ny1=-1) - elif cb_location == "bottom": - sz = self._ncols * Size.AxesY(self.axes_llc) - v.append(Size.from_any(self._colorbar_size, sz)) - v.append(Size.from_any(self._colorbar_pad, sz)) - locator = self._divider.new_locator(nx=0, nx1=-1, ny=0) - for i in range(self.ngrids): - self.cbar_axes[i].set_visible(False) - self.cbar_axes[0].set_axes_locator(locator) - self.cbar_axes[0].set_visible(True) - - for col, ax in enumerate(self.axes_row[0]): - if h: - h.append(self._horiz_pad_size) - - if ax: - sz = Size.AxesX(ax, aspect="axes", ref_ax=self.axes_all[0]) - else: - sz = Size.AxesX(self.axes_all[0], - aspect="axes", ref_ax=self.axes_all[0]) - - if (cb_location == "left" - and (cb_mode == "each" - or (cb_mode == "edge" and col == 0))): - h_cb_pos.append(len(h)) - h.append(Size.from_any(self._colorbar_size, sz)) - h.append(Size.from_any(self._colorbar_pad, sz)) - - h_ax_pos.append(len(h)) - h.append(sz) - - if (cb_location == "right" - and (cb_mode == "each" - or (cb_mode == "edge" and col == self._ncols - 1))): - h.append(Size.from_any(self._colorbar_pad, sz)) - h_cb_pos.append(len(h)) - h.append(Size.from_any(self._colorbar_size, sz)) - - v_ax_pos = [] - v_cb_pos = [] - for row, ax in enumerate(self.axes_column[0][::-1]): - if v: - v.append(self._vert_pad_size) - - if ax: - sz = Size.AxesY(ax, aspect="axes", ref_ax=self.axes_all[0]) - else: - sz = Size.AxesY(self.axes_all[0], - aspect="axes", ref_ax=self.axes_all[0]) - - if (cb_location == "bottom" - and (cb_mode == "each" - or (cb_mode == "edge" and row == 0))): - v_cb_pos.append(len(v)) - v.append(Size.from_any(self._colorbar_size, sz)) - v.append(Size.from_any(self._colorbar_pad, sz)) - - v_ax_pos.append(len(v)) - v.append(sz) - - if (cb_location == "top" - and (cb_mode == "each" - or (cb_mode == "edge" and row == self._nrows - 1))): - v.append(Size.from_any(self._colorbar_pad, sz)) - v_cb_pos.append(len(v)) - v.append(Size.from_any(self._colorbar_size, sz)) - - for i in range(self.ngrids): - col, row = self._get_col_row(i) - locator = self._divider.new_locator(nx=h_ax_pos[col], - ny=v_ax_pos[self._nrows-1-row]) - self.axes_all[i].set_axes_locator(locator) - - if cb_mode == "each": - if cb_location in ("right", "left"): - locator = self._divider.new_locator( - nx=h_cb_pos[col], ny=v_ax_pos[self._nrows - 1 - row]) - - elif cb_location in ("top", "bottom"): - locator = self._divider.new_locator( - nx=h_ax_pos[col], ny=v_cb_pos[self._nrows - 1 - row]) - - self.cbar_axes[i].set_axes_locator(locator) - elif cb_mode == "edge": - if (cb_location == "left" and col == 0 - or cb_location == "right" and col == self._ncols - 1): - locator = self._divider.new_locator( - nx=h_cb_pos[0], ny=v_ax_pos[self._nrows - 1 - row]) - self.cbar_axes[row].set_axes_locator(locator) - elif (cb_location == "bottom" and row == self._nrows - 1 - or cb_location == "top" and row == 0): - locator = self._divider.new_locator(nx=h_ax_pos[col], - ny=v_cb_pos[0]) - self.cbar_axes[col].set_axes_locator(locator) - - if cb_mode == "single": - if cb_location == "right": - sz = self._nrows * Size.AxesX(self.axes_llc) - h.append(Size.from_any(self._colorbar_pad, sz)) - h.append(Size.from_any(self._colorbar_size, sz)) - locator = self._divider.new_locator(nx=-2, ny=0, ny1=-1) - elif cb_location == "top": - sz = self._ncols * Size.AxesY(self.axes_llc) - v.append(Size.from_any(self._colorbar_pad, sz)) - v.append(Size.from_any(self._colorbar_size, sz)) - locator = self._divider.new_locator(nx=0, nx1=-1, ny=-2) - if cb_location in ("right", "top"): - for i in range(self.ngrids): - self.cbar_axes[i].set_visible(False) - self.cbar_axes[0].set_axes_locator(locator) - self.cbar_axes[0].set_visible(True) - elif cb_mode == "each": - for i in range(self.ngrids): - self.cbar_axes[i].set_visible(True) - elif cb_mode == "edge": - if cb_location in ("right", "left"): - count = self._nrows - else: - count = self._ncols - for i in range(count): - self.cbar_axes[i].set_visible(True) - for j in range(i + 1, self.ngrids): - self.cbar_axes[j].set_visible(False) - else: - for i in range(self.ngrids): - self.cbar_axes[i].set_visible(False) - self.cbar_axes[i].set_position([1., 1., 0.001, 0.001], - which="active") - - self._divider.set_horizontal(h) - self._divider.set_vertical(v) - - -AxesGrid = ImageGrid |