PythonPlot.jl icon indicating copy to clipboard operation
PythonPlot.jl copied to clipboard

`bbox_inches="tight"` hardcoded

Open tfiers opened this issue 2 years ago • 1 comments

All figures are displayed with matplotlib's auto-selection of the crop:

https://github.com/JuliaPy/PythonPlot.jl/blob/fe588f4e3b084b9d0ada8641939c6331def77036/src/PythonPlot.jl#L86

This is a great default. But sometimes you want to have more control over the bbox (especially when working with extreme aspect ratios, when "tight" produces totally different figsizes than what you requested).

Also, if in your rcparams, savefig.bbox is set to "standard" (the default) and not "tight", then your saved figures will differ from the displayed figures, which is confusing.

So, it would be nice if this hardcoded setting was somehow configureable in PythonPlot.

tfiers avatar Sep 26 '23 04:09 tfiers

This is what I currently use to override PythonPlot's display (ignoring other formats besides PNG, and foregoing the _showable(m, f) check):


using PythonPlot: Figure, matplotlib as mpl

function set_bbox(bbox = "standard")
    if bbox ∈ ("standard", "tight")  # The dict-like `mpl.rcParams` object errors if not
        mpl.rcParams["savefig.bbox"] = bbox
    end
    # From PythonPlot.jl:
    @eval Main function Base.show(io::IO, m::MIME"image/png", f::Figure)
        if $(bbox == "standard")  # Can't pass that here.
            f.canvas.print_figure(io, format="png")
        else
            f.canvas.print_figure(io, format="png", bbox_inches=$bbox)
        end
    end
end

tfiers avatar Sep 27 '23 12:09 tfiers