Skip to content

[Bug]: Some styles trigger pcolormesh grid deprecation #21723

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
prisae opened this issue Nov 23, 2021 · 17 comments · Fixed by #22216 or #22285
Closed

[Bug]: Some styles trigger pcolormesh grid deprecation #21723

prisae opened this issue Nov 23, 2021 · 17 comments · Fixed by #22216 or #22285
Assignees
Milestone

Comments

@prisae
Copy link

prisae commented Nov 23, 2021

Bug summary

Calling plot_surface followed by fig.colorbar results in the following deprecation warning:

Auto-removal of grids by pcolor() and pcolormesh() is deprecated since 3.5
and will be removed two minor releases later; please call grid(False) first.

However, setting ax.grid(False) first does not help, the Warning is still shown.

Code for reproduction

Edit: As noted further down in the discussion: The warning does not appear for the default style. But if you load, e.g., plt.style.use('bmh'), you will see the warning.

# https://matplotlib.org/stable/gallery/mplot3d/surface3d.html

import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator
import numpy as np

plt.style.use('bmh')  # Edit: One of the styles with which you will see the warning

fig, ax = plt.subplots(subplot_kw={"projection": "3d"})

# Make data.
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

# Plot the surface.
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,
                       linewidth=0, antialiased=False)

# Customize the z axis.
ax.set_zlim(-1.01, 1.01)
ax.zaxis.set_major_locator(LinearLocator(10))
# A StrMethodFormatter is used automatically
ax.zaxis.set_major_formatter('{x:.02f}')

# Add a color bar which maps values to colors.
fig.colorbar(surf, shrink=0.5, aspect=5)

plt.show()

Actual outcome

 MatplotlibDeprecationWarning: Auto-removal of grids by pcolor() and pcolormesh() is deprecated
 since 3.5 and will be removed two minor releases later; please call grid(False) first.
 fig.colorbar(surf, shrink=0.5, aspect=5)

Expected outcome

No Warning or a warning with a fix that works.

Additional information

Works fine for matplotlib<3.5.

Operating system

Linux

Matplotlib Version

3.5.0

Matplotlib Backend

module://ipykernel.pylab.backend_inline

Python version

3.88

Jupyter version

6.4.0

Installation

conda

@QuLogic QuLogic changed the title [Bug]: plt_surface followed by fig.colorbar results in DeprecationWarning; suggested fix does not work [Bug]: plot_surface followed by fig.colorbar results in DeprecationWarning; suggested fix does not work Nov 23, 2021
@QuLogic
Copy link
Member

QuLogic commented Nov 23, 2021

I cannot reproduce this in a script or in Jupyter Notebook. Maybe you have a custom matplotlibrc or style setting?

@prisae
Copy link
Author

prisae commented Nov 23, 2021

Good point, and I tried. By default it indeed does not happen. However, it happens if you use, e.g., plt.style.use('bmh') or plt.style.use('ggplot').

@jklymak
Copy link
Member

jklymak commented Nov 23, 2021

OK, so this has nothing to do with colorbar explicitly, and the same warning pops up for pcolromesh by itself:

import matplotlib.pyplot as plt
import numpy as np
plt.style.use('ggplot')

fig, ax = plt.subplots()
# Make data.
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

surf = ax.pcolormesh(X, Y, Z)
plt.show()
MatplotlibDeprecationWarning: Auto-removal of grids by pcolor() and pcolormesh() is deprecated since 3.5 and will be removed two minor releases later; please call grid(False) first.
  surf = ax.pcolormesh(X, Y, Z)

This came in in #15604 (@anntzer) In that PR we stopped pcolormesh from removing the grid lines automatically, which was the old behaviour.

OTOH, I guess I am not clear why we are deprecating this, or if it is even possible to do so cleanly. Its impossible for pcolormesh to know if the user expects the grids to stay or go.

@QuLogic QuLogic changed the title [Bug]: plot_surface followed by fig.colorbar results in DeprecationWarning; suggested fix does not work [Bug]: Some styles trigger pcolormesh grid deprecation Nov 23, 2021
@timhoffm
Copy link
Member

timhoffm commented Nov 23, 2021

[tl/dr] I needed this write-down to find out what do to. Go to Solution if you don't want to follow the details.

I'll try to summarize the situation.

History

Basic conflict:

  • depending on style we may or may not have grids on; plus maybe explicitly set by the user.
  • pcolormesh with a grid on top is not wanted most of the time.

Before #15604 the canonical resolution is that the mesh trumps the grid and pcolormesh deactivates the grid.
This is what you want in many cases, but not always, e.g. The mesh doesn't fill the whole Axes (#15600 which brought up the topic) or a user could have explicitly activated a grid.

Conceptually, auto-remove-grid through a plotting function is questionable. That's beyond their responsibility.

So #15604 deprecated the behavior.

We can get away with this because it doesn't change appearance for most standard cases:

  • All shipped styles with grid use axes.axisbelow: True and thus the grid vanishes behind the mesh
  • The default style has axes.axisbelow: line but no grid

Problem here

The problem is that these cases still see the (irrelevant) deprecation message.

Solution

I think we can remove most of the deprecation annoyance by not warning in case of axes.axisbelow: True.

Alternative

For completeness only, after writing this I decided that actually removing grid manipulation is the correct thing to do.
imshow() doesn't remove the grid either.

One could also reconsider that grid-removal is somewhat meaningful for pcolormesh, but make it configurable via a remove_grid=True parameter. That way, users can deactivate the behavior if needed. This has still a small discoverability problem, but bearable:

  1. I run my code and the grid vanishes
  2. I debug and find that pcolormesh removes it
  3. I check the docs and find remove_grid

Note: I don't think that defaulting to False would make sense. With either case one would change the default only in rare cases. But adding a parameter that optionally executes a command for rare cases, does not make sense if I can do the same with a simple ax.grid(False) in the next line.

@phollox-arch
Copy link

Hello,
I'm not sure if I'm adding to this discussion, but I'm seeing the same warning. I'm importing seaborn and calling sns.set() and sns.set_palette('bright')

@jklymak
Copy link
Member

jklymak commented Nov 24, 2021

  • I feel it was a misfeature that we ever removed the grid in the first place just for this artists type.
  • I don't see a way to sensibly deprecate this since it is not something the user is actively doing. So we can
    1. stop the behaviour without deprecation, or
    2. live with it.

I personally prefer 1 as I consider this a bug, but can understand why some would think this was a feature and would prefer 2.

@jklymak
Copy link
Member

jklymak commented Nov 24, 2021

... added to the weekly dev call to discuss, unless we can come to consensus here.

@prisae
Copy link
Author

prisae commented Jan 4, 2022

Was there anything decided in this regard? I see the same problem appearing in v3.5.1 as well.

@jklymak
Copy link
Member

jklymak commented Jan 4, 2022

@prisae No I don't think there was a discussion. I'll re-add to this weeks call. Thanks for the ping...

@pharshalp
Copy link
Contributor

pharshalp commented Jan 12, 2022

I have tried to address this issue in a PR (faced this issue in my code --> created a PR to fix it --> and then realized that this had been reported/discussed here earlier).

@tacaswell
Copy link
Member

I think in the case of just colorbare @pharshalp 's PR is reasonable (if we take the position that colorbars were not meant to have grids under the meaning of the rcParam).

I agree with @timhoffm and @jklymak that moving to a state where plotting does not mess with the visibility of the grid is the right thing to do, however we left no way for a user who wants to keep the grid to avoid the warning.

I think @timhoffm 's suggestion of not warning when the grid would be fully hidden by the mask is reasonable, but has some edges that are not great (meshes with low alpha values and if the user zooms out to bigger than the mesh).

Another alternative is to add some state (either another rcParam on a module attribute) to suppress this warning, default it to False, and have the warning specify to set it. This is obviously not great as it adds (yet) more state.

@jklymak
Copy link
Member

jklymak commented Jan 12, 2022

My position is still that we should just stop removing the grid, and have an API note that says we have changed this and if you dont' want a grid to go ahead and toggle the grid. I'm going to guess that most folks who want a grid, also wanted it when there was a pcolormesh, and toggled it on again when we arbitrarily removed it.

@timhoffm
Copy link
Member

We have multiple ways to annoy users:

  1. change functionality without notice (or earlier than announced) - here: stop removing the grid immediately
  2. warn at runtime for cases that are irrelevant for the user - here: grid is behind the artist and not visible
  3. do not warn at runtime for some relevant cases - here: meshes with low alpha values and if the user zooms out to bigger (note: we still have the API change announcement, it's only not repeated at runtime because the cases are hard to detect)

We have to pick one in this case. So let's choose the one with the least impact = severity of annoyance * likelyhood of occurence. IMHO 3) is the way to go, and that's realized by my propsal above.

@tacaswell
Copy link
Member

The consensus on the call is to go with option 3 (leave the warning, but only when the grid is above the colormesh).

@jklymak
Copy link
Member

jklymak commented Jan 14, 2022

re-open because the above is still not implemented to my knowledge.

@jklymak jklymak reopened this Jan 14, 2022
@AzharUddinSheikh
Copy link

plt.rcParams['axes.grid'] = False
this stop the warning

@pllim
Copy link

pllim commented Jan 20, 2022

Hello. I think this might be affecting astropy too. Please see astropy/astropy#12753 . Thanks!

@timhoffm timhoffm self-assigned this Jan 21, 2022
timhoffm added a commit to timhoffm/matplotlib that referenced this issue Jan 22, 2022
Fixes matplotlib#21723.

See matplotlib#21723 (comment)
for a full desciption of motivation and edge cases.
timhoffm added a commit to timhoffm/matplotlib that referenced this issue Jan 22, 2022
Fixes matplotlib#21723.

See matplotlib#21723 (comment)
for a full desciption of motivation and edge cases.
timhoffm added a commit to timhoffm/matplotlib that referenced this issue Jan 23, 2022
Fixes matplotlib#21723.

See matplotlib#21723 (comment)
for a full desciption of motivation and edge cases.
timhoffm added a commit to timhoffm/matplotlib that referenced this issue Jan 23, 2022
Fixes matplotlib#21723.

See matplotlib#21723 (comment)
for a full desciption of motivation and edge cases.
@QuLogic QuLogic modified the milestones: v3.6.0, v3.5.2 Jan 25, 2022
stanleyjs added a commit to stanleyjs/matplotlib that referenced this issue Jan 26, 2022
_axstack whitespace

_parent._axstack

move clear functions into figurebase

clear subfigures first

Clear child subfigures

tests

move property back to init

changelog

reduce changelog

TEST: partial subfig clearing

Clear all children subfigs in parent

Clear toolbars only in Figure

Restore whitespace on :684

flake8

old comment

TITLE UNDERLINE

Expire mathttext-related deprecations

Fixed review comments and a few more removals

Use PNG image as the icon for Tk plot windows

Fix loading user-defined icons for Tk toolbar

Co-Authored-By: Elliott Sales de Andrade <quantum.analyst@gmail.com>

Prevent tooltips from overlapping buttons in NavigationToolbar2Tk

Update doc/api/next_api_changes/behavior/22135-JSS3.rst

Co-authored-by: Tim Hoffmann <2836374+timhoffm@users.noreply.github.com>

Fix loading user-defined icons for Qt plot window

Update both zoom/pan states on wx when triggering from keyboard.

Previously, typing "o" and "p" on a wx window would result in both the
zoom and the pan button being pressed at the same time.  Fix that by
relying on the same strategy as all other backends.

Switch transOffset to offset_transform.

Note that most APIs *previously* already accepted *offset_transform* as
kwarg, due to the presence of the `set_offset_transform` setter.  Prefer
that name (shortening it to `offset_trf` for local variables).

Backcompat for the old `transOffset` name is kept in most places by
introducing a property alias.

Started deprecating tight_bbox and tight_layout

Recreated deprecated files and changed references

Fix drawing animated artists changed in selector callback

Fix getting tuple of animated artists; add comments and test

Use list comprehension instead of filter

Fix z_order

Improve docstring and add comments

Ensure log formatters use Unicode minus

Fixes matplotlib#21540

FIX: better repr for subgridspecs

FIX: add test for identical subgridspec

FIX

Use a fixture for widget test axes

Improved coverage of mathtext and removed unused code

Removed dev from 3.10-version

DOC: explain too many ticks

DOC: artist extent

Update doc/users/faq/howto_faq.rst

Co-authored-by: Tim Hoffmann <2836374+timhoffm@users.noreply.github.com>

Apply suggestions from code review

Co-authored-by: Tim Hoffmann <2836374+timhoffm@users.noreply.github.com>

FIX: streamline examples

DOC: add new example

Update doc/users/faq/howto_faq.rst

Co-authored-by: Tim Hoffmann <2836374+timhoffm@users.noreply.github.com>

Apply suggestions from code review

Co-authored-by: Tim Hoffmann <2836374+timhoffm@users.noreply.github.com>

FIX: macosx check case-insensitive app name

Only check for "python" case insensitive to match either Python
or pythonw.

Fix typo in `axhline` docstring

Removed unused variables etc.

Passed on sides and pad_to

Use standard toolbar in wx.

The previous approach manually positioned the toolbar to have it at the
bottom of the window, but this can in fact be achieved just with
style=wx.TB_BOTTOM.

Removing manual sizing of the toolbar also fixes a bug previously
present on Windows, whereby a `set_size_inches` reducing the size of the
canvas would *not* reduce the window width, likely because it was forced
to its max value by the toolbar's explicit size.

Expire axes_grid1/axisartist deprecations.

Clean up 3d plot box_aspect zooming

linting

Cleanup

Make zoom and dist private attrs

Deprecate Axes3D.dist

Deprecate Axes3D.dist

DOC: Fix upstream URL for merge in CircleCI

DOC: Add hatch API to reference

DOC: Document default cap styles

- remove '(default)' from cap style demo as this is only true for Line2D
  and the default rcParameters
- document default cap styles for Line2D and Patch in their cap style
  setters
- document default cap style for GraphicsContextBase in the same way as
  it's already done for joinstyle

Factor out underline-thickness lookups in mathtext.

Just adding a small helper function.

Fix merge

Update _formlayout.py

Bump minimum NumPy to 1.19

Fix name typo in API changes

DOC: git:// is deprecated.

See https://github.blog/2021-09-01-improving-git-protocol-security-github/

Today is a brownout day.

I removed the sentence that git:// is RO and https:// is RW as you soon
won't be able to use git://

Personally I use https:// as RO and ssh:// as RW, but I understand it
might not be convenient on windows.

Stop sorting artists in Figure Options dialog

With matplotlib#18216, the order that artists are added to an Axes is their
canonical order. The dialog should not be sorting them in some other
manner.

Additionally, this fixes a bug in that `apply_callback` indexes back to
the original list, which means that changes will be made to the *wrong*
artist if sorting actually occurred. It also makes the legend almost
entirely wrong as well.

See https://discourse.matplotlib.org/t/bug-on-re-generate-automatic-legend-of-matplotlib-figure-property/22511

Document ArtistList

DOC: Document default join style

in the same way as the default cap styles.

Jointly track x and y in PolygonSelector.

It's easier to track them in a single list.

Also init _selection_artist and _polygon_handles with empty arrays, as
there's no reason to pretend that they start with 0, 0.  On the other
hand, _xys does need to start as a non-empty array as the last point
gets updated as being the cursor position.

Verify that lib/src is not changed on -doc backports

ci: Use released version to build v*-doc branches

Fix typo in `tutorials/intermediate/arranging_axes.py`

Trivial doc fix to annotations tutorial.

Initially I just wanted to capitalize "matplotlib", but the wording was
a bit awkward too, so...

ENH: implement and use base layout_engine for more flexible layout.

FIX: typo

Remove some unnecessary getattrs.

Figures always have a canvas attached (even if it's just a
FigureCanvasBase), and canvases always have a "manager" attribute (which
may be None).

Canvases also always have a "toolbar" attribute (which also may be
None).

Altogether this allows avoiding a couple of getattrs.

FIX: Return value instead of enum in get_capstyle/_joinstyle

for MarkerStyle and Patch (as do Line2D, Collections and GraphicsContextBase)

(1) turn off the grid after creating colorbar axes (2) added a test

Cleanup "anatomy of a figure"

No visual change.

Improve formatting of "Anatomy of a figure"

- Adapt margins
- Reduce figure border width (still thick but not massive)
- fontfamily: make code monospace
- slightly move annotations to better places

Run wheel builds on PRs when requested by a label

Fix typos

Deprecate cleared kwarg to get_renderer.

This makes it easier for to mock the agg backend (e.g., in mplcairo).
Note that this is anyways only a shorthand for calling a method
(`.clear()`) on the renderer itself, so just issuing that call is just
as simple, more explicit, and can be done even when one just has access
to the renderer and not to the canvas (an admittedly rather hypothetical
case).

Improve ft2font error reporting.

This prints out human-readable error messages for failures.

As an example, `FT2Font("setup.py")` now raises
```
RuntimeError: In FT2Font: Can not load face (unknown file format; error code 0x2)
```

Ensure that all toolbar (old/new) subclasses can be init'ed consistently

i.e. with the same signature: with `canvas` as sole arg for the
old-style toolbars, with `toolmanager` as sole arg for the new ones.

Subclasses that explicitly support setting a parent widget keep that
support (except for gtk, which stashed that in the `.win` attribute but
never used it), but that argument is always optional now; the default is
the canvas' parent.

The goal is to later replace all _get_toolbar implementations by a
simple call (always with the same signature (dependent on the value of
rcParams["toolbar"])) to the correct class in the FigureManagerBase
constructor.

DOC: More capitalization of Axes

In line with matplotlib#18726.

Triggered by matplotlib#22242.

Started deprecating afm, fontconfig_pattern, and type1font

Recreated deprecated files and changed references

DOC: add dropdown

DOC: add dropdown

Fix topbar

DOC: Add all the releases

Just last point releases before 3.0

DOC: update release_guide

DOC: rename versions [skip azp] [skip appveyor] [skip actions]

BLD: pin sphinx data theme [skip actions] [skip appveyor] [skip azp]

Add some tests for minspan{x,y} in RectangleSelector

Skip tests on the -doc branches

DOC: fix version switcher json [skip actions] [skip appveyor] [skip azp]

DOC: fix version switcher [skip actions] [skip appveyor] [skip azp]

FIX

Fix Qt enum access.

This was missed in the global fixing of enums for PyQt6 (now using
_enum everywhere).  To trigger, try to interactively save a figure but
input an invalid format, e.g. "foo.bar".

MNT: deprecate filled parameter to colorbar

The *filled* kwarg doesn't directly do anything and filling is
completely controlled by the mappable.

OTOH, maybe we want to reinstate the ability of *filled* to fill
contours?

Deprecate colorbar.draw_all.

Merge main and "other" params docs in colorbar.make_axes.

`colorbar.make_axes` (and `make_axes_gridspec`) are low-level enough
that it's not worth the complexity in docstring interpolation to split
out "main" parameters and "other" parameters, when the docstring of
the more commonly used `plt.colorbar` smashes them together.  (Also,
`pad` is not really much more low-level than `shrink` or `aspect`...)

Numpydocify _colormap_kw_doc and use it in Colorbar too.

Specify the focal length for 3d plots

Create a gallery example showing the different proj_type options

Typo

Test fix, example fix, and linting

What's new, example fix

Merge conflict

Offset zooming of focal length

Code review comments, consolidate projection functions

Try and fix zooming

Try to fix the focal length zooming

Update example

Cleanup

example cleanup

more example tweaks

more example tweak

swap plot order

Enforce a positive focal length

focal lentgh tests

flake8 linting

docstring tweak

Code review changes

Make focal_length a private attr

linting

More code review changes and tests

Additional code review changes

Disalbe showing cursor data on a QuadMesh by default

Give the Tk toolbar buttons a flat look

Simplify FontProperties.copy().

Expanded documentation of Axis.set_ticks as per discussion in issue matplotlib#22262 (matplotlib#22270)

* Expanded documentation of Axis.set_ticks()

* Fix flake8 W293 (blank line contains whitespace) warnings

* Expanded the documentation even more based on discussion in issue matplotlib#22262

* Update lib/matplotlib/axis.py - @jklymak rewording

Co-authored-by: Jody Klymak <jklymak@gmail.com>

* Reduced verbosity of doc by @jklymak 's suggestion.

* On second thought, the previous wording could be seen as very ambiguous.

* Update set_ticks docstring by @timhoffm compromise suggestion

Co-authored-by: Tim Hoffmann <2836374+timhoffm@users.noreply.github.com>

* Removed extra sentence as per @timhoffm review

* Blank line whitespace issue crept up again

* Update lib/matplotlib/axis.py as per correction by @timhoffm

Co-authored-by: Tim Hoffmann <2836374+timhoffm@users.noreply.github.com>

Co-authored-by: unknown <>
Co-authored-by: Jody Klymak <jklymak@gmail.com>
Co-authored-by: Tim Hoffmann <2836374+timhoffm@users.noreply.github.com>

MNT: make colorbars locators and formatters properties

TST: test setters and getters in colorbar

DOC: improve crosslinking for docs

FIX: small fixes

DOC: fix property docstrings

FIX: minorformatter None

Removed unused code

Fixed repr for SecondaryAxis

and increase coverage for axes/_base.py

Apply suggestions from code review

Co-authored-by: Tim Hoffmann <2836374+timhoffm@users.noreply.github.com>

Display bad format string in error message.

I had something like `for i in range(n): plot(..., f"oC{i}")` which
works for n up to 10, but for greater values one gets "oC10" which is
not supported (which is reasonable, as some single-digit strings are
actually *marker* abbreviations); mentioning the full format string in
the error message ("Unrecognized character 0 in format string 'oC10'")
makes it clearer.

FIX: bury import of matplotlib.font_manager

We need to ensure that the sub-module matplotlib.font_manager is imported when
it is used in SclarFormater, however if we import it at the top level we will
get circular imports.

closes matplotlib#22305

In mpl_toolkits, use the same floating point slop as for standard ticks.

Standard ticks use _interval_contains_close (in Axis._update_ticks); do
the same in mpl_toolkits and deprecate the custom slops delta1, delta2
(if such knobs are really needed, we should try to have the same API in
the main library anyways).

FIX: use window_extent instead

Add set_cursor method to FigureCanvasTk

Don't warn on grid removal deprecation is grid is hidden

Fixes matplotlib#21723.

See matplotlib#21723 (comment)
for a full desciption of motivation and edge cases.

Modify example for x-axis tick labels at the top

Primarily describe how to do this for a single Axes (using `tick_params`).
Only mention the `rcParams` in a note. Globally changing `rcParams` is
usually not a good idea and should not be demonstrated. The whole
topic of `rcParams` (global, context, matplotlibrc) is too long to
be discussed here and not the focus of the example.

Remove Axes sublist modification from docs

Make bar of pie example more explicit

... by saving and using the results from Axes method calls. Also,
replace the colour palette in the bar chart.

Respect `position` argument in Tk toolmanager

Set focus properly to ensure mouse events get delivered to Tk canvas

Rework/fix Text layout cache.

Instead of caching the text layout based on a bunch of properties, only
cache the computation of the text's metrics, which 1) should be the most
expensive part (everything else in _get_layout is relatively simple
iteration and arithmetic) and 2) depends on fewer implicit parameters.

In fact, the old cache key was insufficient in that it would conflate
usetex and non-usetex strings together, even though they have different
metrics; e.g. with the (extremely artificial) example
```python
figtext(.1, .5, "foo\nbar", size=32)  # (0)
figtext(.1, .5, "foo\nbar", usetex=True, size=32, c="r", alpha=.5)  # (1)
figtext(.3, .5, "foo\nbar", usetex=True, size=32, c="r", alpha=.5)  # (2)
```
the linespacing of the first usetex string (1) would be "wrong": it is
bigger that the one of the second usetex string (2), because it instead
reuses the layout computed for the non-usetex string (0).

The motivation is also to in the future let the renderer have better
control on cache invalidation (with a yet-to-be-added renderer method),
e.g. multiple instances of the same renderer cache could share the same
layout info.

Rename outdated seaborn styles.

They are kept available under a versioned name for backcompat.

dangling clf

Silently discard blits if bbox is outside canvas

Custom cap widths in box and whisker plots in bxp() and boxplot()

Add pre-commit config and dev instructions

Update pre-commit hooks

rst format

Disable autofixes on PRs

Unless manually triggered. See https://pre-commit.ci/#configuration

add pre-commit to environment.yml

Slow down autoupdate schedule

alphabetize

Add sentence about where pre-commit config is

Add excludes to pre-commit config

Otherwise end of lines of test images will get fixed,
this also ignores all the prev_whats_new and prev_api_changes
as well as vendored components (agg, gitwash)

pre-comit config

CI: ban coverage 6.3 that may be causing random hangs in fork test
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment