John,
Thank you very much--that's a big help. Some time today or tomorrow I
will try to track down any remaining quiver problems. I suspect similar
dpi-related problems may lurk elsewhere as well.
Those lazy values worked pretty well!
One of the things that puzzles me is the following method of
FigureCanvasAgg in backend_agg:
def print_png(self, filename_or_obj, *args, **kwargs):
FigureCanvasAgg.draw(self)
renderer = self.get_renderer()
original_dpi = renderer.dpi
renderer.dpi = self.figure.dpi
if type(filename_or_obj) in (str, unicode):
filename_or_obj = open(filename_or_obj, 'w')
self.get_renderer()._renderer.write_png(filename_or_obj,
self.figure.dpi)
renderer.dpi = original_dpi
The FigureCanvasAgg.draw(self) command gets turned into
self.figure.draw(self.renderer), which is executed *before* the
renderer.dpi gets set to self.figure.dpi, so it seems like there is the
possibility of an inconsistency. I suspect there is no problem in
practice, but it is confusing.
Now that I look again, it looks like what is happening is that the
get_renderer call in FigureCanvasAgg.draw is setting the renderer dpi to
the figure dpi, as well as setting self.renderer, in which case most of
the code in print_png seems to be superfluous.
Mostly unrelated question: is there any point in keeping
backend_agg2.py, or at least keeping it in the backends directory?
Maybe it is time to move that and backend_emf.py (and maybe others) to
some sort of cold storage, in case someone is inspired later to
resurrect them.
Eric
John Hunter wrote:
> On Sat, Apr 26, 2008 at 2:04 PM, Eric Firing <[EMAIL PROTECTED]> wrote:
>
>> The attached script, run on svn mpl, illustrates a positioning problem: note
>> that the subplot titles are badly positioned in the 50 dpi version. I
>> believe that changing from 150 to 50 dpi should yield a perfect scaling of
>> everything in the plot, but it doesn't. There is a similar problem with a
>> quiver key positioned outside the axes frame, but I don't have a trivial
>> example yet; I am hoping that whatever solves the title positioning problem
>> will take care of that also. If not, I will make a simple example and we
>> can attack it separately.
>
> There were two problems with title positioning. The first was that
> the title offset transformation was hardcoded in pixels and not dpi,
> and the second was that is was not getting notifed when the figure dpi
> was changed. I changed the offset to read:
>
> self.titleOffsetTrans = mtransforms.Affine2D().translate(
> 0.0, 5.0*self.figure.dpi/72.)
>
> and added a callbacks registry to the figure instance so that
> observers could be notified when dpi was changed (dpi used to be a
> lazy value on the maintenance branch but is a plain-ol-value on the
> trunk).
>
> def on_dpi_change(fig):
> self.titleOffsetTrans.clear().translate(
> 0.0, 5.0*fig.dpi/72.)
>
> self.figure.callbacks.connect('dpi_changed', on_dpi_change)
>
> It looks like the problem in the quiver code is that the "labelsep"
> property reads the dpi when the QuiverKey is intiitalized but does not
> get notified on dpi change. I added a callback there too so you
> should test to see if this helps. The dpi setting is also referenced
> in the _set_transform method. Since you are more familiar with the
> quiver code that I am, and this hint may point you in the right
> direction, I'll let you take a look at that and see if a callback is
> needed.
>
> On a related note, one trick I use when debugging text layout problems
> is to turn on the "bbox". If the bbox is right but the text is in the
> wrong place, you know it is in the layout. If the bbox is in the
> wrong place, you know the problem is in the font metrics:
>
> boxprops = dict(facecolor='red')
> ax1.set_title('Top Plot', bbox=boxprops)
>
> JDH
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
Don't miss this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Matplotlib-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel