Yongtao Cui | 1 Jan 03:40
Picon
Favicon

Re: Windows doesn't support repeated draw()

I had similar problem before. This is a bug in 0.91.1. It has been fixed in svn. You can try updating.
 
Yongtao

On Dec 31, 2007 5:21 PM, charles bartlett <csbartlett-Wuw85uim5zDR7s880joybQ@public.gmane.org> wrote:
I ran the attached python program under Ubuntu and Windows2000 with
different results. I expect the results to be similar.

Running under Ubuntu works great, and as expected.

Running under Windows2000 does not work well. Specifically, it works for
awhile, but then stops working and opens a small window with title:
wxPython: stdout/stderr, with many messages ultimately ending with the
root issue - Cannot_Open_Resource, Could not open facefile, in
_get_agg_font at line 301 of backend_agg.py.

On Windows2000 it runs for about 1 minute, then stops working and starts
delivering this series of error messages.

On Ubuntu, I can run it all day with no problems.

It might be easiest if you simply run the program under Linux and under
Windows and see if you note the same difference.

To run the program, maximize to expose the buttons and slider. Press
Start - you should see the plot flip back-and-forth between sin and cos
every 1 second. Move the slider to adjust the speed of flip.

I know that this program could be laid out better, etc - and that is not
my issue; this program is just a quick check of the capabilities of
matplotlib plot updates. I am interested in supporting real-time
plotting using matplotlib within a wxPython GUI. So, maybe you could
suggest an alternative way to write this program that works well on
Windows.

[More fundamentally, this program should work equivalently on Windows
and Linux. This may be a wxWidgets issue however, i.e. perhaps it
involves how graphical resources are obtained/available/reclaimed from
the underlying graphics subsystem of the OS. Perhaps the reclaim is much
more efficient under Linux and I need to do some explicit resource
reclaim under Windows (?).]

BTW, if you are interested, I can clean this snippet up a little and
maybe you would want to include it in your examples, as it demonstrates
another aspect of matplotlib use that may be of general interest (?). Of
course, it should first also work under Windows :).

Thanks for any replies.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@...
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Michael Droettboom | 1 Jan 04:26

Re: Printing problems with "WXAgg" on Linux (minakawa)

>From the traceback, it looks as if you are using the Wx backend, not the WxAgg 
backend, and you are using "usetex" (text rendering using (La)TeX).  The Wx 
backend does not support usetex -- the WxAgg backend does.  Check your 
matplotlibrc or your matplotlib.use command and make sure you're selecting the 
WxAgg backend.

Cheers,
Mike

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
Picon
Favicon

Re: Printing problems with "WXAgg" on Linux (minakawa)

hi Mike,
no it is WxAgg, the code is here:
-----
import wx
import os
import matplotlib
matplotlib.use('WxAgg')
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigCanvas
from matplotlib.figure import Figure
import matplotlib.numerix as numpy

class PlotFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, "Test Printing with WX Backend")
        self.fig   = Figure(None, 100)
        self.canvas= FigCanvas(self, -1, self.fig)
        self.axes  = self.fig.add_axes([0.15,0.15,0.75,0.75])
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.canvas, 1, wx.LEFT|wx.TOP|wx.GROW)
        self.Fit()
        self.Plot_Data()

    def Print_Data(self):
        self.canvas.printerData.SetPaperId(wx.PAPER_A4)
        self.canvas.printerData.SetOrientation(wx.LANDSCAPE)
        dpi = self.canvas.figure.dpi.get()
        self.canvas.figure.dpi.set(200)
        self.canvas.Printer_Print()
        self.canvas.figure.dpi.set(dpi)
        self.canvas.draw()

    def Plot_Data(self):
        t = numpy.arange(0.0,5.0,0.01)
        s = numpy.sin(2.0*numpy.pi*t)
        c = numpy.cos(0.4*numpy.pi*t)
        self.axes.plot(t,s)
        self.axes.plot(t,c)

if __name__ == '__main__':
    app = wx.PySimpleApp()
    fig = PlotFrame()
    fig.Show(True)
    fig.Print_Data()
    app.MainLoop()
---------------------

But you got a point with usetex : I set it to False and then no more 
traceback, though the preview indicates that LANDSCAPE mode was not 
applied.
So : WxAgg seems to have issues with usetex=True, and LANDSCAPE request 
does not seem to be honored... I am using svn revision 4797.

best, and happy New Year!
Johann

Michael Droettboom wrote:
> From the traceback, it looks as if you are using the Wx backend, not the WxAgg 
> backend, and you are using "usetex" (text rendering using (La)TeX).  The Wx 
> backend does not support usetex -- the WxAgg backend does.  Check your 
> matplotlibrc or your matplotlib.use command and make sure you're selecting the 
> WxAgg backend.
>
> Cheers,
> Mike
>   

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
Alan G Isaac | 2 Jan 16:55
Picon
Favicon
Gravatar

Re: Problems with binary install of matplotlib-0.9.1 python2.4 on windows

On Tue, 4 Dec 2007, John Hunter apparently wrote:
> I don't think we've purged the mscvp71 dependency -- 
> I just installed the 91.1 exe on my system and got the 
> same error on pylab import.  I can fix it by dropping the 
> dll into c:\windows\system32 (and I updated the install 
> notes to this effect) but this is a pretty onerous 
> requirement for the naive user, so if we can figure out 
> how to remove the dll dependency or ship the dll, that 
> would be ideal. 

Do Python 2.4 and 2.5 ship with this DLL?
(I notice it in my Python directories, and
I did not put it there.)

Cheers,
Alan Isaac

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
Paul Novak | 3 Jan 17:09
Picon

Re: Legend with numpoints = 1 [PATCH]

Hello,

I have included below a patch that attempts to fix the problems with
legend() when numpoints = 1. When numpoints = 1 and a line is plotted,
_marker == 'None', and a line segment of length handlelen is placed in
the legend; when symbols are being plotted, a single symbol is centered
in the handlelen region and placed in the legend. For LineCollection and
RegularPolyCollection, the legend when numpoints = 1 looks like the
legend when numpoints > 1; the legend always has a line or colored
region and the line or colored region and text do not overlap. The
results of the patch can be seen in the included figures.

There are some problems with the patch.
1) The variable left has to be introduced into the function
_get_handles() to properly place the legend markers.
2) Legends which contain a Patch are not handled, because I do not know
which kind of plot would result in a Patch in the legend, so I could not
test the effect of changing the legend.
3) The patch was created against 0.91.1; however, I do not think that
there is any difference in legend.py between 0.91.1 and SVN.

I would appreciate any comments or improvements on the patch.

Thanks,

Paul

diff -u a/lib/matplotlib/legend.py b/lib/matplotlib/legend.py
--- a/lib/matplotlib/legend.py	2008-01-02 16:33:47.000000000 -0600
+++ b/lib/matplotlib/legend.py	2008-01-03 08:56:01.000000000 -0600
@@ -273,6 +273,7 @@

         def _get_handles(self, handles, texts):
             HEIGHT = self._approx_text_height()
+        left = 0.5

             ret = []   # the returned legend lines

@@ -280,6 +281,10 @@
                 x, y = label.get_position()
                 x -= self.handlelen + self.handletextsep
                 if isinstance(handle, Line2D):
+                if self.numpoints == 1 and handle._marker == 'None':
+                    self._xdata = npy.linspace(left, left +
self.handlelen, 2)
+                elif self.numpoints == 1:
+                    self._xdata = npy.array([left + self.handlelen*0.5])
                     ydata = (y-HEIGHT/2)*npy.ones(self._xdata.shape, float)
                     legline = Line2D(self._xdata, ydata)
                     legline.update_from(handle)
@@ -298,6 +303,8 @@
                     p.set_clip_box(None)
                     ret.append(p)
                 elif isinstance(handle, LineCollection):
+                if self.numpoints == 1:
+                    self._xdata = npy.linspace(left, left +
self.handlelen, 2)
                     ydata = (y-HEIGHT/2)*npy.ones(self._xdata.shape, float)
                     legline = Line2D(self._xdata, ydata)
                     self._set_artist_props(legline)
@@ -311,6 +318,8 @@
                     ret.append(legline)

                 elif isinstance(handle, RegularPolyCollection):
+                if self.numpoints == 1:
+                    self._xdata = npy.array([left])
                     p = Rectangle(xy=(min(self._xdata), y-3/4*HEIGHT),
                                   width = self.handlelen, height=HEIGHT/2,
                                   )

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@...
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Paul Novak | 3 Jan 17:09
Picon

Re: Legend with numpoints = 1

Hello,

I have further investigated problems with legend() when numpoints = 1.
The images show what happens when numpoints = 1 for a Line2D, such as
when calling plot(), for a LineCollection, and for a
RegularPolyCollection, such as when using scatter(). As can be seen in
the figures, calling legend() with numpoints = 1 results in either an
absence of a line or a misplacement of a symbol or colored region,
creating an ugly legend.

I have made the three figures using the script included below,
line_collection.py from the examples, and scatter_demo.py from the examples.

I will send a second message that includes a patch that attempts to fix
the problems with legend() when numpoints=1, and some figures showing
the improvement in the legends.

Paul

---
#!/usr/bin/env python

import matplotlib
matplotlib.use('GTKAgg')

from pylab import *

x = arange(0.0, 5.0)
y = 2.0 * x

figure(1)
plot(x, y, 'o', label='symbol')
plot(x, y, 'k-', label='line')

leg=legend(loc='best',numpoints=1)

show()

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@...
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Matthias Michler | 4 Jan 12:51
Picon

Re: axes numbers font size

Hello,

On Tuesday 18 December 2007 23:42, G. O. Nikiforov wrote:
> 1. Is there a way to change the font type and font size of the numbers on
> the axes in a figure? Not the labels (xlabel and ylabel - they are easy to
> change), but the actual numbers. If for example x goes from 0 to 6 in step
> of 2, the numbers showing below the x axis would be 0, 2, 4, and 6 for
> example. It is the fontsize and font of these numbers that I want to
> change. It must be some axis property but I cannot figure it out.

I'm not sure that this is the right solution and it does not use an axes 
property, but the following works for me:
--------------------------------------------------------------------------------------------------------------
import pylab
pylab.figure()
ax = pylab.axes()
ax.plot(pylab.arange(10))
xlabels = ax.get_xticklabels()
xlabel0 = xlabels[0]                              # one of the xtick labels
xlabel0.get_fontsize()
xlabel0.set_fontsize(20)
pylab.show()
----------------------------------------------------------------------------------------------------------------
So finally my solution needs an iteration over a list like
--------------------------------------------------------------------------------------------------------------
for xlabel_i in ax.get_xticklabels():
    xlabel_i.set_fontsize(20)
--------------------------------------------------------------------------------------------------------------

> 3. The data that I would like to plot is in an ASCII format, where the
> first row and column is text and the rest is numbers. What would be the
> best way to import that into maplotlib and then assign a variable name to
> each column (without the first entry, which would be the variable name).

Here again I can only present an work around, but maybe it helps you 
nevertheless
-------------------------------------------------------------------------------------------------------
import numpy as n

fp = open('test.dat', "w")
fp.write('a b c \n')                        # write some example data
fp.write('X 1 2 \n')
fp.write('Y 3 4 \h')
fp.close()

fp = open('test.dat', "r")
rows = fp.readlines()
fp.close()

one_row = rows[0]                           # one line of the saved data 
print one_row

one_row_entries = one_row.split(' ')
print one_row_entries

# one would like to do something like the following to get all numbers

XY = n.zeros((2, 2), dtype=n.int32)
for i, row in enumerate(rows[1:]):          # neglecting the first rows
    xy_list = row.split(' ')[1:-1]          # neglecting first column and '\n'
    # convert to array and afterwards from string to integer values  
    xy_array = (n.array(xy_list)).astype(n.int32)    
    XY[i, :] = xy_array

print "XY =",XY

print "X =", XY[0, :], " and Y =", XY[1, :]
---------------------------------------------------------------------------------------------------------------

best regards,
Matthias

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
Michael Droettboom | 4 Jan 14:32

Re: mouse coordinate precision in figures

You can also set a custom formatter for each axis without hacking the 
matplotlib code::

   def custom_formatter(value):
     return str(value)

   gca().fmt_xdata = custom_formatter
   gca().fmt_ydata = custom_formatter

We may want to add a cleaner (more obvious) API for this -- but there 
might be good reasons that it works this way that I just don't know about.

Cheers,
Mike

Yongtao Cui wrote:
> Hi Jack,
>  
> In \matplotlib\axes.py, Axes.format_xdata()
>  
> func = self.xaxis.get_major_formatter().format_data_short
> ->func = self.xaxis.get_major_formatter().format_data
>  
> same for Axes.format_ydata()
>  
> -Yongtao
> 
> On Dec 22, 2007 1:46 PM, Jack Sankey <jack.sankey@... 
> <mailto:jack.sankey@...>> wrote:
> 
>     Hello,
> 
>     When you make a figure and move the mouse around inside the axes, the
>     x- and y-values appear in the status bar. Is there a way to change the
>     precision of this data? It's only tracking 3 significant figures and I
>     need more (say you're zoomed in on some data with a large offset).
> 
>     Is there a way to change this in matplotlibrc or some global
>     preference? If not, is it a figure property?
> 
>     Thanks in advance,
>     Jack
> 
>     -------------------------------------------------------------------------
>     This SF.net email is sponsored by: Microsoft
>     Defy all challenges. Microsoft(R) Visual Studio 2005.
>     http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
>     _______________________________________________
>     Matplotlib-users mailing list
>     Matplotlib-users@...
>     <mailto:Matplotlib-users@...>
>     https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>     <https://lists.sourceforge.net/lists/listinfo/matplotlib-users>
> 
> 
> 
> ------------------------------------------------------------------------
> 
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2005.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users@...
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users

--

-- 
Michael Droettboom
Science Software Branch
Operations and Engineering Division
Space Telescope Science Institute
Operated by AURA for NASA

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
Michael Droettboom | 4 Jan 14:42

Re: Legend with numpoints = 1

I'm sure the radio silence to your question is just due to holidays.

Thanks for looking into this.  I'd be happy to incorporate your patch 
when it is ready.

As for your question about plots that can include patches -- patches are 
virtually anything plotted that aren't lines or images.  This includes 
rectangles, polygons and ellipses, for instance.  See something like 
ellipse_demo.py for an example.  Patches are always drawn as rectangles 
in the legend.

Cheers,
Mike

Paul Novak wrote:
> Hello,
> 
> I have further investigated problems with legend() when numpoints = 1.
> The images show what happens when numpoints = 1 for a Line2D, such as
> when calling plot(), for a LineCollection, and for a
> RegularPolyCollection, such as when using scatter(). As can be seen in
> the figures, calling legend() with numpoints = 1 results in either an
> absence of a line or a misplacement of a symbol or colored region,
> creating an ugly legend.
> 
> I have made the three figures using the script included below,
> line_collection.py from the examples, and scatter_demo.py from the 
> examples.
> 
> I will send a second message that includes a patch that attempts to fix
> the problems with legend() when numpoints=1, and some figures showing
> the improvement in the legends.
> 
> Paul
> 
> ---
> #!/usr/bin/env python
> 
> import matplotlib
> matplotlib.use('GTKAgg')
> 
> from pylab import *
> 
> x = arange(0.0, 5.0)
> y = 2.0 * x
> 
> figure(1)
> plot(x, y, 'o', label='symbol')
> plot(x, y, 'k-', label='line')
> 
> leg=legend(loc='best',numpoints=1)
> 
> show()
> 
> 
> 
> 
> 
> ------------------------------------------------------------------------
> 
> 
> ------------------------------------------------------------------------
> 
> 
> ------------------------------------------------------------------------
> 
> 
> ------------------------------------------------------------------------
> 
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2005.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users@...
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users

--

-- 
Michael Droettboom
Science Software Branch
Operations and Engineering Division
Space Telescope Science Institute
Operated by AURA for NASA

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
Michael Droettboom | 4 Jan 15:12

Re: Printing problems with "WXAgg" on Linux (minakawa)

Happy New Year to you as well!

I see now where part of the confusion lies -- even though you have 
specified the WxAgg backend, the Wx backend is being used for the 
printing.  Though I didn't write this code, I assume this is by design 
-- WxAgg can only generate bitmaps, and we don't want to use those for 
printing.  Unfortunately, Wx (non-Agg) has some limitations, as you've 
discovered.  (For a list of the limitations, see 
http://matplotlib.sourceforge.net/backends.html).  Given all those 
shortcomings, you may be better off generating a Postscript file and 
then send that to lpr.  That should work on most modern Linux 
distributions even without a Postscript printer.  You can do:

   savefig("foo.ps")

to use the matplotlib built-in Postscript backend.

As for your other questions -->

   1. You cannot set orientation to LANDSCAPE, it seems "SetOrientation" 
does not work.
   2. When you set  LANDSCAPE manually, only lower half part will be 
printed.

I can't reproduce this.  Your included example seems to produce correct 
LANDSCAPE pages for me.  These are my relevant versions -- what are yours?

wxPython: 2.8.6.1
gtk+: 2.10.9
RHEL4

   3. Printing quality  is far much worse than Windows's printing.

I can confirm that the Postscript generated by Wx is storing a bitmap, 
and not vector data.  This is probably the source of the quality loss. 
I can't quite figure out why this is happening, but I have experienced 
similar problems with another Wx project.  Perhaps that's an inherent 
limitation of Wx printing?  In any case, it's a little bit below the 
level of matplotlib, so perhaps a question on the wxPython mailing list 
would help...

But my suggested workaround -- generating a Postscript file using 
matplotlib's built-in Postscript support, instead of the Wx printing 
framework -- and then printing that may be a better option for you.

Cheers,
Mike

Johann Cohen-Tanugi wrote:
> hi Mike,
> no it is WxAgg, the code is here:
> -----
> import wx
> import os
> import matplotlib
> matplotlib.use('WxAgg')
> from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as 
> FigCanvas
> from matplotlib.figure import Figure
> import matplotlib.numerix as numpy
> 
> class PlotFrame(wx.Frame):
>    def __init__(self):
>        wx.Frame.__init__(self, None, -1, "Test Printing with WX Backend")
>        self.fig   = Figure(None, 100)
>        self.canvas= FigCanvas(self, -1, self.fig)
>        self.axes  = self.fig.add_axes([0.15,0.15,0.75,0.75])
>        sizer = wx.BoxSizer(wx.VERTICAL)
>        sizer.Add(self.canvas, 1, wx.LEFT|wx.TOP|wx.GROW)
>        self.Fit()
>        self.Plot_Data()
> 
>    def Print_Data(self):
>        self.canvas.printerData.SetPaperId(wx.PAPER_A4)
>        self.canvas.printerData.SetOrientation(wx.LANDSCAPE)
>        dpi = self.canvas.figure.dpi.get()
>        self.canvas.figure.dpi.set(200)
>        self.canvas.Printer_Print()
>        self.canvas.figure.dpi.set(dpi)
>        self.canvas.draw()
> 
>    def Plot_Data(self):
>        t = numpy.arange(0.0,5.0,0.01)
>        s = numpy.sin(2.0*numpy.pi*t)
>        c = numpy.cos(0.4*numpy.pi*t)
>        self.axes.plot(t,s)
>        self.axes.plot(t,c)
> 
> if __name__ == '__main__':
>    app = wx.PySimpleApp()
>    fig = PlotFrame()
>    fig.Show(True)
>    fig.Print_Data()
>    app.MainLoop()
> ---------------------
> 
> But you got a point with usetex : I set it to False and then no more 
> traceback, though the preview indicates that LANDSCAPE mode was not 
> applied.
> So : WxAgg seems to have issues with usetex=True, and LANDSCAPE request 
> does not seem to be honored... I am using svn revision 4797.
> 
> best, and happy New Year!
> Johann
> 
> Michael Droettboom wrote:
>> From the traceback, it looks as if you are using the Wx backend, not 
>> the WxAgg backend, and you are using "usetex" (text rendering using 
>> (La)TeX).  The Wx backend does not support usetex -- the WxAgg backend 
>> does.  Check your matplotlibrc or your matplotlib.use command and make 
>> sure you're selecting the WxAgg backend.
>>
>> Cheers,
>> Mike
>>   

--

-- 
Michael Droettboom
Science Software Branch
Operations and Engineering Division
Space Telescope Science Institute
Operated by AURA for NASA

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/

Gmane