Hello,<br><br>Thanks for trying it out.<br><br>I can&#39;t reproduce the error you are getting while running from the command line. I tried it in Ubuntu 11.04 using Python 2.6 with Matplotlib 0.99.3 and 1.0.1, and Python 2.7 with Matplotlib 1.0.1.<br>
<br>I could re-create the exception by using the following code, though:<br><br>&gt;&gt;&gt; fig = plt.figure()<br>&gt;&gt;&gt; ax = fig.add_subplot(111)<br>&gt;&gt;&gt; # No error here.<br>&gt;&gt;&gt; lineid_plot.plot_line_ids(wave, flux, line_wave, line_label1, ax=ax)<br>
(&lt;matplotlib.figure.Figure at 0xb387dec&gt;,<br> &lt;matplotlib.axes.AxesSubplot at 0xb38386c&gt;)<br>&gt;&gt;&gt; plt.clf()<br><br>&gt;&gt;&gt; # Try using the Axes that was cleared by plt.clf(). Raises exception.<br>
&gt;&gt;&gt; lineid_plot.plot_line_ids(wave, flux, line_wave, line_label1, ax=ax)<br><br>But if I don&#39;t pass the Axes that was cleared up by plt.clf(), then I don&#39;t run into any problem.<br><br>&gt;&gt;&gt; lineid_plot.plot_line_ids(wave, flux, line_wave, line_label1)<br>
<br>I was going to remove the arrow head, over the next few commits.<br><br>In any case, the function plot_line_ids() returns both the Figure and the Axes. So one can easily customize the Annotation boxes and arrows by looking through the ax.texts list. One thing I want to do is to assign meaningful unique labels to the label attribute of these boxes. They can then be easily found and customized, say using fig.findobj().<br>
<br>Thanks,<br>Prasanth<br><div class="gmail_quote">On Fri, Sep 16, 2011 at 11:03 PM, Jonathan Slavin <span dir="ltr">&lt;<a href="mailto:jslavin@cfa.harvard.edu">jslavin@cfa.harvard.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi Prasanth,<br>
<br>
Nice work!  The images of plots look good.  Unfortunately I&#39;m running<br>
into a problem when running the example:<br>
<br>
/export/slavin/python/phn-lineid_plot-a88d5f0/lineid_plot.py in<br>
plot_line_ids(wave, flux, line_wave, line_label1, label1_size, extend,<br>
**kwargs)<br>
    182     # coordinates and extract the width.<br>
<br>
    183     for box in ax.texts:<br>
--&gt; 184         b_ext = box.get_window_extent()<br>
    185         box_widths.append(b_ext.transformed(ax_inv_trans).width)<br>
    186<br>
<br>
/usr/local/lib/python2.6/site-packages/matplotlib/text.pyc in<br>
get_window_extent(self, renderer, dpi)<br>
    736             self._renderer = renderer<br>
    737         if self._renderer is None:<br>
--&gt; 738             raise RuntimeError(&#39;Cannot get window extent w/o<br>
renderer&#39;)<br>
    739<br>
    740         bbox, info = self._get_layout(self._renderer)<br>
<br>
RuntimeError: Cannot get window extent w/o renderer<br>
<br>
I haven&#39;t been able to get it to work from the command line -- i.e. the<br>
__name__ = &quot;__main__&quot;, doing python lineid_plot -- though I have gotten<br>
it to work in an interactive session.  I think an Axes instance is<br>
necessary, so you might want to add ax=None as an explicit keyword and<br>
add:<br>
if ax == None:<br>
    ax = plt.gca()<br>
<br>
For my part, I&#39;d prefer not to have arrow heads on the lines, so I would<br>
change the arrowstyle in arrowprops to &quot;-&quot;.  I&#39;ll look over the code<br>
some more and may offer more suggestions.<br>
<br>
Thanks,<br>
Jon<br>
<div><div></div><div class="h5"><br>
On Fri, 2011-09-16 at 20:32 +0530, Prasanth wrote:<br>
&gt; Hello,<br>
&gt;<br>
&gt; My attempt at implementing the <a href="http://lineid_plot.pro" target="_blank">lineid_plot.pro</a> algorithm is available<br>
&gt; at<br>
&gt; <a href="http://github.com/phn/lineid_plot" target="_blank">http://github.com/phn/lineid_plot</a>.<br>
&gt;<br>
&gt; The automatic layout calculation is identical to that in the IDL<br>
&gt; procedure. But I<br>
&gt; have tried to make use of the annotate feature provided by Matplotlib<br>
&gt; for the rest of the<br>
&gt; code.<br>
&gt;<br>
&gt; I don&#39;t have access to IDL and hence couldn&#39;t properly explore the<br>
&gt; working of<br>
&gt; the IDL code. GDL can&#39;t run the code.<br>
&gt;<br>
&gt; After implementing the layout calculations, the rest of the code,<br>
&gt; surprisingly, turns out<br>
&gt; to be not difficult to write at all. This probably means that I am<br>
&gt; blind to some<br>
&gt; obvious problems!<br>
&gt;<br>
&gt; Feedback will be greatly appreciated.<br>
&gt;<br>
&gt; Thanks,<br>
&gt; Prasanth<br>
&gt;<br>
&gt; On Wed, Aug 24, 2011 at 8:49 PM, Jonathan Slavin<br>
&gt; &lt;<a href="mailto:jslavin@cfa.harvard.edu">jslavin@cfa.harvard.edu</a>&gt; wrote:<br>
&gt;         If I had the time to do that adaptation, I&#39;d certainly do it<br>
&gt;         -- and may<br>
&gt;         yet -- but it does depend on a lot of things that are very IDL<br>
&gt;         specific<br>
&gt;         such as the character size and plot region, etc.  I think that<br>
&gt;         there are<br>
&gt;         some good hints in the discussion on automatically creating<br>
&gt;         enough room<br>
&gt;         for tick labels<br>
&gt;         (<a href="http://matplotlib.sourceforge.net/faq/howto_faq.html" target="_blank">http://matplotlib.sourceforge.net/faq/howto_faq.html</a>),<br>
&gt;         but there&#39;s quite a bit more needed than that.<br>
&gt;<br>
&gt;         Jon<br>
&gt;<br>
&gt;         On Wed, 2011-08-24 at 11:48 -0300, Taro Sato wrote:<br>
&gt;         &gt; I have my own custom routine to display line identifications<br>
&gt;         at given<br>
&gt;         &gt; redshift but it&#39;s not smart enough to avoid overlapping; it<br>
&gt;         only<br>
&gt;         &gt; alternates the offsets so that adjacent labels won&#39;t always<br>
&gt;         overlap.<br>
&gt;         &gt; What you have in your example plot is certainly doable with<br>
&gt;         MPL...<br>
&gt;         &gt; It&#39;s tricky to ensure that labels are readable most of the<br>
&gt;         time but<br>
&gt;         &gt; since you know how to approach the problem, why don&#39;t you<br>
&gt;         create one<br>
&gt;         &gt; and make it available publicly!  If the desired algorithm<br>
&gt;         needed is<br>
&gt;         &gt; already coded in the IDL script it shouldn&#39;t be too<br>
&gt;         painful.  :D<br>
&gt;         --<br>
&gt;<br>
&gt;         ______________________________________________________________<br>
&gt;         Jonathan D. Slavin              Harvard-Smithsonian CfA<br>
&gt;         <a href="mailto:jslavin@cfa.harvard.edu">jslavin@cfa.harvard.edu</a>         60 Garden Street, MS 83<br>
&gt;         phone: (617) 496-7981           Cambridge, MA 02138-1516<br>
&gt;          cell: (781) 363-0035           USA<br>
&gt;         ______________________________________________________________<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;         _______________________________________________<br>
&gt;         AstroPy mailing list<br>
&gt;         <a href="mailto:AstroPy@scipy.org">AstroPy@scipy.org</a><br>
&gt;         <a href="http://mail.scipy.org/mailman/listinfo/astropy" target="_blank">http://mail.scipy.org/mailman/listinfo/astropy</a><br>
&gt;<br>
&gt;<br>
</div></div>--<br>
<div><div></div><div class="h5">______________________________________________________________<br>
Jonathan D. Slavin              Harvard-Smithsonian CfA<br>
<a href="mailto:jslavin@cfa.harvard.edu">jslavin@cfa.harvard.edu</a>         60 Garden Street, MS 83<br>
phone: (617) 496-7981           Cambridge, MA 02138-1516<br>
 cell: (781) 363-0035           USA<br>
______________________________________________________________<br>
<br>
</div></div></blockquote></div><br>