# Agg eps and bounding box / OO problems

"John Hunter" <jdh2358@...287...> writes:

···

On 2/5/07, Berthold Höllmann <bhoel-lDxpuoTbsqf2eFz/2MeuCQ@...1456....> wrote:

I get a file 'test.eps'. Using matplotlib 0.87.7 the PS bounding box
of the generated plot is far to wide. Is this a problem with my script
or a Problem of FigureCanvasAgg (and FigureCanvasPS)? What can I do to
get a tight bounding box?

This is a problem with the way PS computes the bounding box -- it uses
the bounding box of the Figure and ignores the fact that much of your
figure is whitespace. It should compute the bounding box of the
visible figure elements, so this should be considered a bug. To
workaround, you can set the figure size to be more like the size of
the content

fig = Figure((3,7)) # set the width and height in inches
canvas = FigureCanvas(fig)
ax.plot([.5,.7],[1.5, 2.5])
ax.set_aspect("equal")
canvas.print_figure('test.eps')

So there is no way to calculate the size occupied by the visible
figure elements? In my target application I also have no easy way to
figure out the size of the resulting plot, I hoped matplotlib has a
way tp extract it from the plotted data.

something like

-----
ax.set_aspect("equal")
ax.autoscale_view()
w, h = fig.get_size_inches()
xmin, xmax = ax.get_xlim()
ymin, ymax = ax.get_ylim()
xext = xmax - xmin
yext = ymax - ymin
if xext < yext:
w = h * xext/yext
else:
h = w * yext/xext
-----

gives a tighter bounding box, still having somehow too much room in
the unchanged direction.

Further, when I leave out the "ax.plot" line, the generated figure is
missing the "Rectangle" and is showing only a pair of axes counting
from 0 to 1. Is that a bug of matplotlib or something I have to fix in
my script?

method and Axes doesn't know how to query it's argument for it's data
limits, which it then feeds to the autoscaler. If you use add_line to