Skip to content

failing upstream-dev CI: matplotlib #4226

Description

@keewis

Recent changes in matplotlib (my guess is matplotlib/matplotlib#17830) seem to have broken a few of our tests:

tracebacks
________________________ TestContour.test_single_level _________________________

self = <xarray.tests.test_plot.TestContour object at 0x7fc60f7c3e20>

        # add_colorbar defaults to false
>       self.plotmethod(levels=[0.1])

xarray/tests/test_plot.py:1561: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
xarray/plot/plot.py:827: in plotmethod
    return newplotfunc(**allargs)
xarray/plot/plot.py:699: in newplotfunc
    cmap_params, cbar_kwargs = _process_cmap_cbar_kwargs(
xarray/plot/utils.py:819: in _process_cmap_cbar_kwargs
    cmap_params = _determine_cmap_params(**cmap_kwargs)
xarray/plot/utils.py:291: in _determine_cmap_params
    cmap, newnorm = _build_discrete_cmap(cmap, levels, extend, filled)
xarray/plot/utils.py:77: in _build_discrete_cmap
    new_cmap, cnorm = mpl.colors.from_levels_and_colors(levels, pal, extend=extend)
/usr/share/miniconda/envs/xarray-tests/lib/python3.8/site-packages/matplotlib/colors.py:2200: in from_levels_and_colors
    norm = BoundaryNorm(levels, ncolors=n_data_colors)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <matplotlib.colors.BoundaryNorm object at 0x7fc60f5048e0>
boundaries = [0.1], ncolors = 0, clip = False

    def __init__(self, boundaries, ncolors, clip=False, *, extend='neither'):
        """
        Parameters
        ----------
        boundaries : array-like
            Monotonically increasing sequence of at least 2 boundaries.
        ncolors : int
            Number of colors in the colormap to be used.
        clip : bool, optional
        """
        if clip and extend != 'neither':
            raise ValueError("'clip=True' is not compatible with 'extend'")
        self.clip = clip
        self.vmin = boundaries[0]
        self.vmax = boundaries[-1]
        self.boundaries = np.asarray(boundaries)
        self.N = len(self.boundaries)
        if self.N < 2:
>           raise ValueError("You must provide at least 2 boundaries "
                             f"(1 region) but you passed in {boundaries!r}")
E           ValueError: You must provide at least 2 boundaries (1 region) but you passed in [0.1]

/usr/share/miniconda/envs/xarray-tests/lib/python3.8/site-packages/matplotlib/colors.py:1508: ValueError
________________________ test_facetgrid_single_contour _________________________

    @requires_matplotlib
    def test_facetgrid_single_contour():

    @requires_matplotlib
    def test_facetgrid_single_contour():
        # regression test for GH3569
        x, y = np.meshgrid(np.arange(12), np.arange(12))
        z = xr.DataArray(np.sqrt(x ** 2 + y ** 2))
        z2 = xr.DataArray(np.sqrt(x ** 2 + y ** 2) + 1)
        ds = xr.concat([z, z2], dim="time")
        ds["time"] = [0, 1]
    
>       ds.plot.contour(col="time", levels=[4], colors=["k"])

xarray/tests/test_plot.py:2409: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
xarray/plot/plot.py:827: in plotmethod
    return newplotfunc(**allargs)
xarray/plot/plot.py:638: in newplotfunc
    return _easy_facetgrid(darray, kind="dataarray", **allargs)
xarray/plot/facetgrid.py:644: in _easy_facetgrid
    return g.map_dataarray(plotfunc, x, y, **kwargs)
xarray/plot/facetgrid.py:248: in map_dataarray
    cmap_params, cbar_kwargs = _process_cmap_cbar_kwargs(
xarray/plot/utils.py:819: in _process_cmap_cbar_kwargs
    cmap_params = _determine_cmap_params(**cmap_kwargs)
xarray/plot/utils.py:291: in _determine_cmap_params
    cmap, newnorm = _build_discrete_cmap(cmap, levels, extend, filled)
xarray/plot/utils.py:77: in _build_discrete_cmap
    new_cmap, cnorm = mpl.colors.from_levels_and_colors(levels, pal, extend=extend)
/usr/share/miniconda/envs/xarray-tests/lib/python3.8/site-packages/matplotlib/colors.py:2200: in from_levels_and_colors
    norm = BoundaryNorm(levels, ncolors=n_data_colors)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
self = <matplotlib.colors.BoundaryNorm object at 0x7fc60d47b280>
boundaries = [4], ncolors = 0, clip = False

    def __init__(self, boundaries, ncolors, clip=False, *, extend='neither'):
        """
        Parameters
        ----------
        boundaries : array-like
            Monotonically increasing sequence of at least 2 boundaries.
        ncolors : int
            Number of colors in the colormap to be used.
        clip : bool, optional
            If clip is ``True``, out of range values are mapped to 0 if they
            are below ``boundaries[0]`` or mapped to ``ncolors - 1`` if they
            are above ``boundaries[-1]``.
    
            If clip is ``False``, out of range values are mapped to -1 if
            they are below ``boundaries[0]`` or mapped to *ncolors* if they are
            above ``boundaries[-1]``. These are then converted to valid indices
            by `Colormap.__call__`.
        extend : {'neither', 'both', 'min', 'max'}, default: 'neither'
            Extend the number of bins to include one or both of the
            regions beyond the boundaries.  For example, if ``extend``
            is 'min', then the color to which the region between the first
            pair of boundaries is mapped will be distinct from the first
            color in the colormap, and by default a
            `~matplotlib.colorbar.Colorbar` will be drawn with
            the triangle extension on the left or lower end.
    
        Returns
        -------
        int16 scalar or array
    
        Notes
        -----
        *boundaries* defines the edges of bins, and data falling within a bin
        is mapped to the color with the same index.
    
        If the number of bins, including any extensions, is less than
        *ncolors*, the color index is chosen by linear interpolation, mapping
        the ``[0, nbins - 1]`` range onto the ``[0, ncolors - 1]`` range.
        """
        if clip and extend != 'neither':
            raise ValueError("'clip=True' is not compatible with 'extend'")
        self.clip = clip
        self.vmin = boundaries[0]
        self.vmax = boundaries[-1]
        self.boundaries = np.asarray(boundaries)
        self.N = len(self.boundaries)
        if self.N < 2:
>           raise ValueError("You must provide at least 2 boundaries "
                             f"(1 region) but you passed in {boundaries!r}")
E           ValueError: You must provide at least 2 boundaries (1 region) but you passed in [4]

/usr/share/miniconda/envs/xarray-tests/lib/python3.8/site-packages/matplotlib/colors.py:1508: ValueError

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions