You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In #24405 I tried to replace the current pyplot.savefig() wrapper manual implementation, which just has an unhelpful signature of *args, **kwargs, by a standard autogenerated pyplot wrapper, which copies the signature of Figure.savefig, which should itself match the signature of FigureCanvasBase.print_figure -- except for the fact that savefig adds a "transparent" kwarg not present in print_figure (and for a discrepancy in the name of the first argument: fname vs filename).
Unfortunately, the "transparent" kwarg has some problematic semantics (when set to True -- nothing happens when it is set to False): it always makes axes transparent, but the figure is made transparent only if the "facecolor" and "edgecolor" kwargs are unset -- if "facecolor"/"edgecolor" are None, then they are considered as set to the corresponding rcParams values (savefig.facecolor/savefig.edgecolor). This is actually documented behavior ("If True, the Axes patches will all be transparent; the Figure patch will also be transparent unless facecolor and/or edgecolor are specified via kwargs.")
This means that the real signature of print_figure is not print_figure(..., transparent=None [-> rcparam], facecolor=None [-> rcparam], edgecolor=None [-> rcparam], ...) but that facecolor/edgecolor can indeed not appear explicitly in the signature, only implicitly via **kwargs (or they have to instead default to some special placeholder like _UNSET). This is not a desirable state, e.g. due to the difficulty in providing introspection for the signature of savefig.
Proposed fix
Mildly break the API and instead make transparent=True override anything set by the facecolor and edgecolor kwargs, which should be rarely(?) used anyways.
Summary
In #24405 I tried to replace the current pyplot.savefig() wrapper manual implementation, which just has an unhelpful signature of
*args, **kwargs
, by a standard autogenerated pyplot wrapper, which copies the signature of Figure.savefig, which should itself match the signature of FigureCanvasBase.print_figure -- except for the fact that savefig adds a "transparent" kwarg not present in print_figure (and for a discrepancy in the name of the first argument: fname vs filename).Unfortunately, the "transparent" kwarg has some problematic semantics (when set to True -- nothing happens when it is set to False): it always makes axes transparent, but the figure is made transparent only if the "facecolor" and "edgecolor" kwargs are unset -- if "facecolor"/"edgecolor" are None, then they are considered as set to the corresponding rcParams values (savefig.facecolor/savefig.edgecolor). This is actually documented behavior ("If True, the Axes patches will all be transparent; the Figure patch will also be transparent unless facecolor and/or edgecolor are specified via kwargs.")
This means that the real signature of print_figure is not
print_figure(..., transparent=None [-> rcparam], facecolor=None [-> rcparam], edgecolor=None [-> rcparam], ...)
but that facecolor/edgecolor can indeed not appear explicitly in the signature, only implicitly via**kwargs
(or they have to instead default to some special placeholder like _UNSET). This is not a desirable state, e.g. due to the difficulty in providing introspection for the signature of savefig.Proposed fix
Mildly break the API and instead make
transparent=True
override anything set by thefacecolor
andedgecolor
kwargs, which should be rarely(?) used anyways.See also #9080 (comment).
The text was updated successfully, but these errors were encountered: