dpi settings are still a source of confusion. Suppose one wants to get
the bounding boxes of strings in a png file, for use as clickable
regions on a web site. Just use the get_window_extent() method of each
text object after it has been drawn with savefig, right? Wrong! The
gotcha is that get_window_extent() is always based on the "ordinary"
dpi, not on the "savefig" dpi.
In [1]:import matplotlib as mpl
In [2]:mpl.use('agg')
In [4]:import matplotlib.pyplot as plt
In [5]:fig = plt.figure()
In [6]:t = plt.text(0.5, 0.6, 'testing')
In [7]:fig.savefig('/tmp/t50.png', dpi=50)
In [9]:t.get_window_extent().extents
Out[9]:array([ 328. , 278.4 , 356.046875, 287.4 ])
In [10]:fig.savefig('/tmp/t150.png', dpi=150)
In [11]:t.get_window_extent().extents
Out[11]:array([ 328. , 278.4 , 411.875, 302.4 ])
In [12]:t._renderer.dpi
Out[12]:150
I find this very confusing--the _renderer.dpi is not being used by
get_window_extent(). Is this the intended behavior? If so, I would
like to at least add a note to that effect to the get_window_extent
docstring.
The obvious workaround is to always use
"fig.savefig('figname.png', dpi=rcParams['figure.dpi'])
in this sort of application.
Eric
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Matplotlib-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel