You can subscribe to this list here.
| 2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(3) |
Jun
|
Jul
|
Aug
(12) |
Sep
(12) |
Oct
(56) |
Nov
(65) |
Dec
(37) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2004 |
Jan
(59) |
Feb
(78) |
Mar
(153) |
Apr
(205) |
May
(184) |
Jun
(123) |
Jul
(171) |
Aug
(156) |
Sep
(190) |
Oct
(120) |
Nov
(154) |
Dec
(223) |
| 2005 |
Jan
(184) |
Feb
(267) |
Mar
(214) |
Apr
(286) |
May
(320) |
Jun
(299) |
Jul
(348) |
Aug
(283) |
Sep
(355) |
Oct
(293) |
Nov
(232) |
Dec
(203) |
| 2006 |
Jan
(352) |
Feb
(358) |
Mar
(403) |
Apr
(313) |
May
(165) |
Jun
(281) |
Jul
(316) |
Aug
(228) |
Sep
(279) |
Oct
(243) |
Nov
(315) |
Dec
(345) |
| 2007 |
Jan
(260) |
Feb
(323) |
Mar
(340) |
Apr
(319) |
May
(290) |
Jun
(296) |
Jul
(221) |
Aug
(292) |
Sep
(242) |
Oct
(248) |
Nov
(242) |
Dec
(332) |
| 2008 |
Jan
(312) |
Feb
(359) |
Mar
(454) |
Apr
(287) |
May
(340) |
Jun
(450) |
Jul
(403) |
Aug
(324) |
Sep
(349) |
Oct
(385) |
Nov
(363) |
Dec
(437) |
| 2009 |
Jan
(500) |
Feb
(301) |
Mar
(409) |
Apr
(486) |
May
(545) |
Jun
(391) |
Jul
(518) |
Aug
(497) |
Sep
(492) |
Oct
(429) |
Nov
(357) |
Dec
(310) |
| 2010 |
Jan
(371) |
Feb
(657) |
Mar
(519) |
Apr
(432) |
May
(312) |
Jun
(416) |
Jul
(477) |
Aug
(386) |
Sep
(419) |
Oct
(435) |
Nov
(320) |
Dec
(202) |
| 2011 |
Jan
(321) |
Feb
(413) |
Mar
(299) |
Apr
(215) |
May
(284) |
Jun
(203) |
Jul
(207) |
Aug
(314) |
Sep
(321) |
Oct
(259) |
Nov
(347) |
Dec
(209) |
| 2012 |
Jan
(322) |
Feb
(414) |
Mar
(377) |
Apr
(179) |
May
(173) |
Jun
(234) |
Jul
(295) |
Aug
(239) |
Sep
(276) |
Oct
(355) |
Nov
(144) |
Dec
(108) |
| 2013 |
Jan
(170) |
Feb
(89) |
Mar
(204) |
Apr
(133) |
May
(142) |
Jun
(89) |
Jul
(160) |
Aug
(180) |
Sep
(69) |
Oct
(136) |
Nov
(83) |
Dec
(32) |
| 2014 |
Jan
(71) |
Feb
(90) |
Mar
(161) |
Apr
(117) |
May
(78) |
Jun
(94) |
Jul
(60) |
Aug
(83) |
Sep
(102) |
Oct
(132) |
Nov
(154) |
Dec
(96) |
| 2015 |
Jan
(45) |
Feb
(138) |
Mar
(176) |
Apr
(132) |
May
(119) |
Jun
(124) |
Jul
(77) |
Aug
(31) |
Sep
(34) |
Oct
(22) |
Nov
(23) |
Dec
(9) |
| 2016 |
Jan
(26) |
Feb
(17) |
Mar
(10) |
Apr
(8) |
May
(4) |
Jun
(8) |
Jul
(6) |
Aug
(5) |
Sep
(9) |
Oct
(4) |
Nov
|
Dec
|
| 2017 |
Jan
(5) |
Feb
(7) |
Mar
(1) |
Apr
(5) |
May
|
Jun
(3) |
Jul
(6) |
Aug
(1) |
Sep
|
Oct
(2) |
Nov
(1) |
Dec
|
| 2018 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2020 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2025 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: Trevor P. <tr...@ir...> - 2004-07-02 21:00:44
|
>-----Original Message-----
>From: mat...@li...
>[mailto:mat...@li...]On Behalf Of
>Sebastian Haase
>[...]
>Hi Trevor,
>I just substituted like this
>
> if (ignore) {
> minx =3D 1e+308; //orig: std::numeric_limits<double>::max();
> maxx =3D 1e-308; //orig: std::numeric_limits<double>::min();
> }
>
>and didn't have any problem.=20
Thanks - looking at that snippet made me realize I was switched around - =
I was setting minx =3D DBL_MIN and maxx =3D DBL_MAX.
With that fixed, it works fine. =20
I agree this might be a good thing to change in CVS, since this is the =
only thing tripping up a clean compile with gcc 2.95.
Trevor
|
|
From: Sebastian H. <ha...@ms...> - 2004-07-02 20:31:20
|
On Friday 02 July 2004 01:23 pm, Trevor Perrin wrote:
> Hi,
>
> I'm trying to compile matplotlib-0.54.2 on FreeBSD 4.8, using gcc-2.95.3.
>
> In _transforms.cpp, std::numeric_limits<double>::max() and ::min() aren't
> present, so I've tried replacing them with #include<float.h>, DBL_MIN and
> DBL_MAX.
>
> However, now an error is being raised in ticker.py:get_locator(), line 638:
>
> try: ld = math.log10(d)
> except OverflowError:
> print >> sys.stderr, 'AutoLocator illegal dataInterval
> range %s; returning NullLocator'%d return NullLocator()
>
>
> I.e., the OverflowError is occurring. I'm assuming this is cause of the
> change I made; I can run the same test script under Windows with no
> problems (but the test script is a little too involved for me to paste
> here).
>
> Does anyone have ideas on a better workaround?
>
>
> Trevor
Hi Trevor,
I just substituted like this
if (ignore) {
minx = 1e+308; //orig: std::numeric_limits<double>::max();
maxx = 1e-308; //orig: std::numeric_limits<double>::min();
}
and didn't have any problem.
I running debian, where 2.95 is still the "standard". Maybe this could be
changed in CVS - just for one more year or so ;-)
Cheers,
Sebastian Haase
|
|
From: Trevor P. <tr...@ir...> - 2004-07-02 20:23:39
|
Hi,
I'm trying to compile matplotlib-0.54.2 on FreeBSD 4.8, using =
gcc-2.95.3. =20
In _transforms.cpp, std::numeric_limits<double>::max() and ::min() =
aren't present, so I've tried replacing them with #include<float.h>, =
DBL_MIN and DBL_MAX.
However, now an error is being raised in ticker.py:get_locator(), line =
638:
try: ld =3D math.log10(d)
except OverflowError:
print >> sys.stderr, 'AutoLocator illegal dataInterval =
range %s; returning NullLocator'%d
return NullLocator()
I.e., the OverflowError is occurring. I'm assuming this is cause of the =
change I made; I can run the same test script under Windows with no =
problems (but the test script is a little too involved for me to paste =
here).
Does anyone have ideas on a better workaround?
Trevor
|
|
From: danny s. <dan...@ya...> - 2004-07-02 15:33:59
|
another newbie question. BTW I am learning where to find documentation. Most of this stuff isn't in the documentation per se, but in the class library, but please bare with me. I am aving big troubles setting figure sizes. In a plot command. I have tried plot(...,figsize=(6,8)) and plot(...,figsize_inches=(6,8) set(gcf(),'figsize',(6,8)) set(gcf(),'figsize_inches',(6,8)) none work for me. OK I'm stumped, what's the right way. thanks, Danny __________________________________ Do you Yahoo!? Yahoo! Mail - 50x more storage than other providers! http://promotions.yahoo.com/new_mail |
|
From: John H. <jdh...@ac...> - 2004-07-02 14:00:27
|
>>>>> "danny" == danny shevitz <dan...@ya...> writes:
danny> newbie question alert. Is there a way to thicken the
danny> plotlines on a plot? I'm currently using fmt='k^-' and am
danny> trying to make transparencies. I want the plotlines to show
danny> up better. Any way to do this?
Hi Danny,
You may want to take a look at
http://matplotlib.sf.net/tutorial.html#lineprops which shows several
ways of setting linewidths and other line properties. In addition to
the way Gary showed, you can also use keyword arguments
plot(x ,y, linewidth=2.0)
The default linewidth is controlled by the lines.linewidth property in
your matplotlibrc file -- see http://matplotlib.sf.net/.matplotlibrc.
JDH
|
|
From: Gary R. <ga...@em...> - 2004-07-02 01:39:15
|
Here's a snippet done on errorbars which should point you in the right direction: l1,e1=errorbar(m, t, [tN, tP], fmt='rD-', ecolor=(.5,.5,.5), capsize=3) set(e1,"linewidth",1,"markeredgewidth",1) set(l1,"linewidth",2,"markersize",5,"markerfacecolor",'k',"markeredgecolor",'k') ----- Original Message ----- From: danny shevitz <dan...@ya...> Date: Thu, 1 Jul 2004 10:05:55 -0700 (PDT) To: matplotlib <mat...@li...> Subject: [Matplotlib-users] thickening plotlines > newbie question alert. > > Is there a way to thicken the plotlines on a plot? I'm currently using > fmt='k^-' and am trying to make transparencies. I want the plotlines to > show up better. Any way to do this? > > TIA, > Danny > unmatched networking opportunities. Visit www.blackhat.com > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- _______________________________________________ Talk More, Pay Less with Net2Phone Direct(R), up to 1500 minutes free! http://www.net2phone.com/cgi-bin/link.cgi?143 |
|
From: Jim B. <jb...@se...> - 2004-07-01 21:37:53
|
Hi John,
Today i finally got around to trying a suggestion
that you made on May 22...on how to put a legend on a Figure
(outside of the axis). So i hacked up the example
legendDemo.py to experiment with:
# Haked up legendDemp.py
# Thanks to Charles Twardy for this example
from matplotlib.matlab import *
a = arange(0,3,.02)
b = arange(0,3,.02)
c=exp(a)
d=c.tolist()
d.reverse()
d = array(d)
ax = subplot(111)
lines = plot(a,c,'k--',a,d,'k:',a,c+d,'k')
#legend(('Model length', 'Data length', 'Total message length'), 'upper
left')
fig = gcf()
line1 = lines[0]
line2 = lines[1]
line3 = lines[2]
fig.legend((line1, line2, line3),
('Model length', 'Data length', 'Total message length'),
'upper left')
ax.set_ylim([-1,20])
ax.grid(0)
xlabel('Model complexity --->')
ylabel('Message length --->')
title('Minimum Message Length')
set(gca(), 'yticklabels', [])
set(gca(), 'xticklabels', [])
savefig('legend_demo_small', dpi=60)
savefig('legend_demo_large', dpi=120)
show()
# End of: Haked up legendDemp.py
I then go the following error:
clavius:/home/jbenson/python>python legendDemo.py
Traceback (most recent call last):
File "legendDemo.py", line 22, in ?
'upper left')
File "/usr/local/lib/python2.3/site-packages/matplotlib/figure.py", line
179, in legend
l = Legend(handles, labels, loc)
TypeError: __init__() takes exactly 5 arguments (4 given)
clavius:/home/jbenson/python>
Should that line 179 in figure.py be:
l = Legend(self, handles, labels, loc) # -added ->self<- ?
Just for fun, i tried that change and re-ran:
clavius:/home/jbenson/python>python legendDemo.py
Traceback (most recent call last):
File "legendDemo.py", line 22, in ?
'upper left')
File "/usr/local/lib/python2.3/site-packages/matplotlib/figure.py", line
179, in legend
l = Legend(self, handles, labels, loc)
File "/usr/local/lib/python2.3/site-packages/matplotlib/legend.py", line
107, in __init__
self._texts = self._get_texts(labels, textleft, upper)
File "/usr/local/lib/python2.3/site-packages/matplotlib/legend.py", line
215, in _get_texts
HEIGHT = self._approx_text_height()
File "/usr/local/lib/python2.3/site-packages/matplotlib/legend.py", line
126, in _approx_text_height
return
self.FONTSIZE/72.0*self.figure.dpi.get()/self.parent.bbox.height()
AttributeError: 'NoneType' object has no attribute 'dpi'
clavius:/home/jbenson/python>
...so those errors look worse.
(i'm using matplotlib-0.54.2)
Any more hints?
Thanks,
Jim
|
|
From: danny s. <dan...@ya...> - 2004-07-01 17:06:01
|
newbie question alert. Is there a way to thicken the plotlines on a plot? I'm currently using fmt='k^-' and am trying to make transparencies. I want the plotlines to show up better. Any way to do this? TIA, Danny __________________________________ Do you Yahoo!? Yahoo! Mail - You care about security. So do we. http://promotions.yahoo.com/new_mail |
|
From: John H. <jdh...@ac...> - 2004-07-01 13:49:52
|
>>>>> "John" == John Hunter <jdh...@ac...> writes:
John> Haven't had a chance to test your example yet but hopefully
John> I can take a look tomorrow. I haven't done much memory leak
John> testing against the _image module yet so this will be a good
John> opportunity. I very recently rewrote _image.cpp using cxx.
John> I trust you have a fresh CVS checkout?
Hi Andrew - found and fixed the memory leak. Can't really call it a
leak - more like a "memory gusher". This was in the agg (and image)
module "to string" methods. In my tests, the leak went from 600k per
frame to approx 600 bytes per frame, which is on par for what I see in
other agg memory leak tests.
I made a number of comments in your example to point out places where
you probably should be using matplotlib a little differently - most of
these I flagged with my initials so you can search for them. Modified
script is below.
After you get the script in the final form you want and purge the
comments and memory reporting stuff where appropriate, please add it
to CVS.
I liked the example so much I made an analogous one dynamic_image_gtk.
It's faster than wxagg (13FPS vs 4FPS on my system) which is not
surprising since gtkagg has extension code to transfer agg to the GUI
canvas, and doesn't flicker. Very nice! I would really like to get
that wxagg flicker problem figured out, and the extension code
added... Did I hear you volunteering to be the wxagg maintainer :-)?
#!/usr/bin/env python
"""
Copyright (C) 2003-2004 Jeremy O'Donoghue and others
License: This work is licensed under the PSF. A copy should be included
with this source code, and is also available at
http://www.python.org/psf/license.html
"""
import sys, time, os, gc
import matplotlib
matplotlib.use('WXAgg')
# jdh: you need to control Numeric vs numarray with numerix, otherwise
# matplotlib may be using numeric under the hood and while you are
# using numarray and this isn't efficient. Also, if you use
# numerix=numarray, it is important to compile matplotlib for numarray
# by setting NUMERIX = 'numarray' in setup.py before building
from matplotlib import rcParams
rcParams['numerix'] = 'numarray'
# jdh: you can import cm directly, you don't need to go via
# matplotlib.matlab
import matplotlib.cm as cm
from matplotlib.backends.backend_wxagg import Toolbar, FigureCanvasWxAgg
# jdh: you don't need a figure manager in the GUI - this class was
# designed for the matlab interface
from matplotlib.figure import Figure
import matplotlib.numerix as numerix
from wxPython.wx import *
TIMER_ID = wxNewId()
# jdh: use this function, or something similar, when reporting a
# memory leak
def report_memory(i):
pid = os.getpid()
a2 = os.popen('ps -p %d -o rss,sz' % pid).readlines()
print i, ' ', a2[1],
return int(a2[1].split()[0])
class PlotFigure(wxFrame):
def __init__(self):
wxFrame.__init__(self, None, -1, "Test embedded wxFigure")
self.fig = Figure((5,4), 75)
self.canvas = FigureCanvasWxAgg(self, -1, self.fig)
self.toolbar = Toolbar(self.canvas)
self.toolbar.Realize()
# On Windows, default frame size behaviour is incorrect
# you don't need this under Linux
tw, th = self.toolbar.GetSizeTuple()
fw, fh = self.canvas.GetSizeTuple()
self.toolbar.SetSize(wxSize(fw, th))
# Create a figure manager to manage things
# Now put all into a sizer
sizer = wxBoxSizer(wxVERTICAL)
# This way of adding to sizer allows resizing
sizer.Add(self.canvas, 1, wxLEFT|wxTOP|wxGROW)
# Best to allow the toolbar to resize!
sizer.Add(self.toolbar, 0, wxGROW)
self.SetSizer(sizer)
self.Fit()
EVT_TIMER(self, TIMER_ID, self.onTimer)
self.cnt = 0
def init_plot_data(self):
# jdh you can add a subplot directly from the fig rather than
# the fig manager
a = self.fig.add_subplot(111)
self.x = numerix.arange(120.0)*2*numerix.pi/120.0
self.x.resize((100,120))
self.y = numerix.arange(100.0)*2*numerix.pi/100.0
self.y.resize((120,100))
self.y = numerix.transpose(self.y)
z = numerix.sin(self.x) + numerix.cos(self.y)
self.im = a.imshow( z, cmap=cm.jet)#, interpolation='nearest')
def GetToolBar(self):
# You will need to override GetToolBar if you are using an
# unmanaged toolbar in your frame
return self.toolbar
def onTimer(self, evt):
self.x += numerix.pi/15
self.y += numerix.pi/20
z = numerix.sin(self.x) + numerix.cos(self.y)
self.im.set_array(z)
self.canvas.draw()
#self.canvas.gui_repaint() # jdh wxagg_draw calls this already
val = report_memory(self.cnt)
if self.cnt==1:
self.start = val # skip cnt=0
self.tstart = time.time()
elif self.cnt==50:
end = val
print 'Average memory consumed per loop: %1.4f\n' % ((end-self.start)/float(self.cnt))
print 'FPS', self.cnt/(time.time() - self.tstart)
sys.exit()
self.cnt += 1
gc.collect()
def onEraseBackground(self, evt):
# this is supposed to prevent redraw flicker on some X servers...
pass
if __name__ == '__main__':
app = wxPySimpleApp()
frame = PlotFigure()
frame.init_plot_data()
# Initialise the timer - wxPython requires this to be connected to the
# receivicng event handler
t = wxTimer(frame, TIMER_ID)
t.Start(200)
frame.Show()
app.MainLoop()
|
|
From: Gerhard V. <s.v...@nt...> - 2004-06-30 14:47:16
|
To answer my own question - I commented out line 790 in font_manager.py: #pickle.dump(self.ttfdict, file(ttfcache, 'w')) This fixed it for me Gerhard Gerhard Venter wrote: > 790, in __init__ > pickle.dump(self.ttfdict, file(ttfcache, 'w')) > IOError: [Errno 2] No such file or directory: > '%USERPROFILE%\\.ttffont.cache' |
|
From: Gerhard V. <s.v...@nt...> - 2004-06-30 13:44:10
|
Hi I have just installed matplotlib and Python 2.3.3 for Windows (Enthought Edition) on Win XP. Then I ran the sample at: http://matplotlib.sourceforge.net/screenshots/simple_plot.py. It caused the traceback below, related to the ttfcache I have tried: 1. Created a System Environment variable called ttfcache that points to C:\Documents and Settings\gventer\Local Settings\Application Data (which is where the Windows font cache file IconCache.db is) 2. Created a folder in %USERPROFILE%\\.ttffont.cache - (that is C:\Documents and Settings\gventer\.ttffont.cache) Every time I still get: Traceback (most recent call last): File "C:\myscripts\simple_plot.py", line 1, in ? from matplotlib.matlab import * File "C:\PYTHON23\Lib\site-packages\matplotlib\matlab.py", line 133, in ? from axes import Axes File "C:\PYTHON23\Lib\site-packages\matplotlib\axes.py", line 10, in ? from axis import XTick, YTick, XAxis, YAxis File "C:\PYTHON23\Lib\site-packages\matplotlib\axis.py", line 20, in ? from font_manager import FontProperties File "C:\PYTHON23\Lib\site-packages\matplotlib\font_manager.py", line 944, in ? fontManager = FontManager() File "C:\PYTHON23\Lib\site-packages\matplotlib\font_manager.py", line 790, in __init__ pickle.dump(self.ttfdict, file(ttfcache, 'w')) IOError: [Errno 2] No such file or directory: '%USERPROFILE%\\.ttffont.cache' What else could I try? Thanks Gerhard |
|
From: Schalkwyk, J. <Joh...@sc...> - 2004-06-29 15:26:38
|
Some more info. I'm running a 1.8Ghz PIV laptop with windows XP
professional. Not sure if speed of machine has anything todo with it. The
repaints cause flicker on the window, and then after a while the messages
appear.
-----Original Message-----
From: Schalkwyk, Johan
Sent: Tuesday, June 29, 2004 11:25 AM
To: 'John Hunter'; Schalkwyk, Johan
Cc: mat...@li...
Subject: RE: [Matplotlib-users] Assertion triggered in wxMemory DC
With the attached example code you sent me I get the following messages
after some time. It seems to be caught in some form of endless loop, just
scrolling the messages over and over.
Also thank you for the example. I can simply my app code much more now.
Where can I find the src distribution. I probably did not look properly on
the web site.
Johan
line 570, in new_gc
self.gc = GraphicsContextWx(self.bitmap, self)
File
"c:\Tools\Python23\lib\site-packages\matplotlib\backends\backend_wx.py",
line 682, in __init__
self.SelectObject(bitmap)
File "C:\Tools\Python23\Lib\site-packages\wx\gdi.py", line 3017, in
SelectObje
ct
return _gdi.MemoryDC_SelectObject(*args, **kwargs)
wx.core.PyAssertionError: C++ assertion "wxAssertFailure" failed in
..\..\src\ms
w\dcmemory.cpp(133): Couldn't select a bitmap into wxMemoryDC
Traceback (most recent call last):
File "mattest2.py", line 42, in OnPaint
self.canvas.draw()
File
"c:\Tools\Python23\lib\site-packages\matplotlib\backends\backend_wx.py",
line 921, in draw
self.figure.draw(self.renderer)
File "c:\Tools\Python23\lib\site-packages\matplotlib\figure.py", line 132,
in
draw
if self.frameon: self._figurePatch.draw(renderer)
File "C:\Tools\Python23\Lib\site-packages\matplotlib\patches.py", line 54,
in
draw
gc = renderer.new_gc()
File
"c:\Tools\Python23\lib\site-packages\matplotlib\backends\backend_wx.py",
line 570, in new_gc
-----Original Message-----
From: John Hunter [mailto:jdh...@ac...]
Sent: Tuesday, June 29, 2004 10:47 AM
To: Schalkwyk, Johan
Cc: mat...@li...
Subject: Re: [Matplotlib-users] Assertion triggered in wxMemory DC
>>>>> "Schalkwyk," == Schalkwyk, Johan <Joh...@sc...>
writes:
Schalkwyk,> Thank you for the help I removed the show() command
Schalkwyk,> from the loop. Now just calling grid(True) multiple
Schalkwyk,> times. On my machine I narrowed the loop to 57 and it
Schalkwyk,> started happening. At 50 it did not.
Perhaps I didn't make myself clear. The way you are using matplotlib
does not make sense. matplotlib has two modes: a "matlab interface"
and an embedded interface. You should not embed the matlab interface
directly into a GUI. The matlab interface does a lot of stuff under
the hood, like creating and managing figures and figure windows,
managing redraws, etc. When you create your own figure window outside
this framework, and then try to use the framework, the result is
undefined. If you are using matplotlib in a GUI, *do not import
matplotlib.matlab*. You need to follow the example of
embedding_in_wx2.py.
Below is your example translated to the GUI interface - on my system,
calling grid until the sun sets presents no problems, and it really
couldn't because all it does is set a boolean. In the matlab
interface, if you have interactive: True in your rc file, calling grid
does a lot more, including repainting the figure. Try running this
example, shaking it, resizing it, etc... and see if you can crash it;
I was unable to cause any problems.
If you have trouble, please let me know, but also consider trying
replacing wx for wxagg, which uses antigrain for drawing and is
probably more stable than wx, which does occasionally show dc related
errors.
By the way, there was an error in your legend code
You had
legend('line', blahblah)
and you need
legend( ('line',), blahblah)
That is, legend expects a list or tuple of strings, not a string.
Schalkwyk,> By the way Kudos for matplotlib. Amazing. I had to dig
Schalkwyk,> around the code and news groups to figure out how to
Schalkwyk,> find the user coordinates of a mouse click. Reading
Schalkwyk,> the code opens your eyes the wonderful design that is
Schalkwyk,> backend dependent.
Thanks. Do you have the src distribution? There is an example in the
examples directory examples/coords_demo.py (works with Tk, GTK and WX)
that shows you how to get the mouse click coordinates. The examples
dir is your first line of defense when you want to figure out
something new. Unfortunately, I forgot to upload the zip file with
the 0.54.2 release, so look here
http://matplotlib.sf.net/examples
Here's the example:
#!/usr/bin/env python
"""
An example of how to use wx or wxagg in an application w/o the toolbar
"""
from matplotlib.numerix import arange, sin, pi
import matplotlib
matplotlib.use('WX')
from matplotlib.backends.backend_wx import FigureCanvasWx as FigureCanvas
from matplotlib.figure import Figure
from wxPython.wx import *
class CanvasFrame(wxFrame):
def __init__(self):
wxFrame.__init__(self,None,-1,
'CanvasFrame',size=(550,350))
self.SetBackgroundColour(wxNamedColor("WHITE"))
self.figure = Figure(figsize=(5,4), dpi=100)
self.ax = self.figure.add_subplot(111)
t = arange(0.0, 2.0, 0.01)
s = sin(2*pi*t)
l = self.ax.plot(t, s, linewidth=1.0)
self.ax.set_xlabel('time (s)')
self.ax.set_ylabel('voltage (mV)')
self.ax.set_title('About as simple as it gets, folks')
self.ax.legend(('line',), loc='upper right')
for i in range(100):
self.ax.grid(True)
self.canvas = FigureCanvas(self, -1, self.figure)
self.sizer = wxBoxSizer(wxVERTICAL)
self.sizer.Add(self.canvas, 1, wxTOP | wxLEFT | wxEXPAND)
# Capture the paint message
EVT_PAINT(self, self.OnPaint)
def OnPaint(self, event):
self.canvas.draw()
class App(wxApp):
def OnInit(self):
'Create the main window and insert the custom frame'
frame = CanvasFrame()
frame.Show(true)
return true
app = App(0)
app.MainLoop()
|
|
From: Schalkwyk, J. <Joh...@sc...> - 2004-06-29 15:26:14
|
With the attached example code you sent me I get the following messages
after some time. It seems to be caught in some form of endless loop, just
scrolling the messages over and over.
Also thank you for the example. I can simply my app code much more now.
Where can I find the src distribution. I probably did not look properly on
the web site.
Johan
line 570, in new_gc
self.gc = GraphicsContextWx(self.bitmap, self)
File
"c:\Tools\Python23\lib\site-packages\matplotlib\backends\backend_wx.py",
line 682, in __init__
self.SelectObject(bitmap)
File "C:\Tools\Python23\Lib\site-packages\wx\gdi.py", line 3017, in
SelectObje
ct
return _gdi.MemoryDC_SelectObject(*args, **kwargs)
wx.core.PyAssertionError: C++ assertion "wxAssertFailure" failed in
..\..\src\ms
w\dcmemory.cpp(133): Couldn't select a bitmap into wxMemoryDC
Traceback (most recent call last):
File "mattest2.py", line 42, in OnPaint
self.canvas.draw()
File
"c:\Tools\Python23\lib\site-packages\matplotlib\backends\backend_wx.py",
line 921, in draw
self.figure.draw(self.renderer)
File "c:\Tools\Python23\lib\site-packages\matplotlib\figure.py", line 132,
in
draw
if self.frameon: self._figurePatch.draw(renderer)
File "C:\Tools\Python23\Lib\site-packages\matplotlib\patches.py", line 54,
in
draw
gc = renderer.new_gc()
File
"c:\Tools\Python23\lib\site-packages\matplotlib\backends\backend_wx.py",
line 570, in new_gc
-----Original Message-----
From: John Hunter [mailto:jdh...@ac...]
Sent: Tuesday, June 29, 2004 10:47 AM
To: Schalkwyk, Johan
Cc: mat...@li...
Subject: Re: [Matplotlib-users] Assertion triggered in wxMemory DC
>>>>> "Schalkwyk," == Schalkwyk, Johan <Joh...@sc...>
writes:
Schalkwyk,> Thank you for the help I removed the show() command
Schalkwyk,> from the loop. Now just calling grid(True) multiple
Schalkwyk,> times. On my machine I narrowed the loop to 57 and it
Schalkwyk,> started happening. At 50 it did not.
Perhaps I didn't make myself clear. The way you are using matplotlib
does not make sense. matplotlib has two modes: a "matlab interface"
and an embedded interface. You should not embed the matlab interface
directly into a GUI. The matlab interface does a lot of stuff under
the hood, like creating and managing figures and figure windows,
managing redraws, etc. When you create your own figure window outside
this framework, and then try to use the framework, the result is
undefined. If you are using matplotlib in a GUI, *do not import
matplotlib.matlab*. You need to follow the example of
embedding_in_wx2.py.
Below is your example translated to the GUI interface - on my system,
calling grid until the sun sets presents no problems, and it really
couldn't because all it does is set a boolean. In the matlab
interface, if you have interactive: True in your rc file, calling grid
does a lot more, including repainting the figure. Try running this
example, shaking it, resizing it, etc... and see if you can crash it;
I was unable to cause any problems.
If you have trouble, please let me know, but also consider trying
replacing wx for wxagg, which uses antigrain for drawing and is
probably more stable than wx, which does occasionally show dc related
errors.
By the way, there was an error in your legend code
You had
legend('line', blahblah)
and you need
legend( ('line',), blahblah)
That is, legend expects a list or tuple of strings, not a string.
Schalkwyk,> By the way Kudos for matplotlib. Amazing. I had to dig
Schalkwyk,> around the code and news groups to figure out how to
Schalkwyk,> find the user coordinates of a mouse click. Reading
Schalkwyk,> the code opens your eyes the wonderful design that is
Schalkwyk,> backend dependent.
Thanks. Do you have the src distribution? There is an example in the
examples directory examples/coords_demo.py (works with Tk, GTK and WX)
that shows you how to get the mouse click coordinates. The examples
dir is your first line of defense when you want to figure out
something new. Unfortunately, I forgot to upload the zip file with
the 0.54.2 release, so look here
http://matplotlib.sf.net/examples
Here's the example:
#!/usr/bin/env python
"""
An example of how to use wx or wxagg in an application w/o the toolbar
"""
from matplotlib.numerix import arange, sin, pi
import matplotlib
matplotlib.use('WX')
from matplotlib.backends.backend_wx import FigureCanvasWx as FigureCanvas
from matplotlib.figure import Figure
from wxPython.wx import *
class CanvasFrame(wxFrame):
def __init__(self):
wxFrame.__init__(self,None,-1,
'CanvasFrame',size=(550,350))
self.SetBackgroundColour(wxNamedColor("WHITE"))
self.figure = Figure(figsize=(5,4), dpi=100)
self.ax = self.figure.add_subplot(111)
t = arange(0.0, 2.0, 0.01)
s = sin(2*pi*t)
l = self.ax.plot(t, s, linewidth=1.0)
self.ax.set_xlabel('time (s)')
self.ax.set_ylabel('voltage (mV)')
self.ax.set_title('About as simple as it gets, folks')
self.ax.legend(('line',), loc='upper right')
for i in range(100):
self.ax.grid(True)
self.canvas = FigureCanvas(self, -1, self.figure)
self.sizer = wxBoxSizer(wxVERTICAL)
self.sizer.Add(self.canvas, 1, wxTOP | wxLEFT | wxEXPAND)
# Capture the paint message
EVT_PAINT(self, self.OnPaint)
def OnPaint(self, event):
self.canvas.draw()
class App(wxApp):
def OnInit(self):
'Create the main window and insert the custom frame'
frame = CanvasFrame()
frame.Show(true)
return true
app = App(0)
app.MainLoop()
|
|
From: Schalkwyk, J. <Joh...@sc...> - 2004-06-29 15:20:27
|
The example I created was the smallest sample code I could make to reproduce
the problem.
The code below is more true to my application. It does not use the matlab
interface. It does however mimick the matlab interface. I did not have the
src distribution so I created this from reading the code. Note the main
frame calls the draw command on the canvas (MatlabFigure) 100 times. This
triggers the problem as well.
I'll take a look at the source distribution.
Thank you for the help
Johan
import wx
import matplotlib
import numarray
matplotlib.use('WX')
from matplotlib.figure import Figure
from matplotlib.backends.backend_wx import FigureCanvasWx
from matplotlib.backend_bases import FigureManagerBase, error_msg
from matplotlib.axes import Axes
from matplotlib.cbook import flatten, is_string_like, exception_to_str
import matplotlib.mlab as mlab
#---------------------------------------------------------------------------
class MatlabFigure(FigureCanvasWx):
def __init__(self, parent):
self.fig = Figure()
FigureCanvasWx.__init__(self, parent, -1, self.fig)
self.figmgr = FigureManagerBase(self, 0)
self.gca = self.figmgr.get_current_axis()
# end def
def GetXY(self, event):
screenPos= numarray.array( event.GetPosition())
ymin, height = self.fig.bbox.intervaly().get_bounds()
x, y = screenPos[0], height-screenPos[1]
if self.gca.in_axes(x, y):
xy = self.gca.transData.inverse_xy_tup((x, y))
return xy
else:
return None
# end if
# end def
def axis(self, *v):
if len(v)==1 and is_string_like(v[0]):
s = v[0]
if s.lower()=='on': self.gca.set_axis_on()
elif s.lower()=='off': self.gca.set_axis_off()
else:
error_msg('Unrecognized string %s to axis; try on or off' %
s)
return
# end if
try: v[0]
except IndexError:
xlim = self.gca.get_xlim()
ylim = self.gca.get_ylim()
return [xlim[0], xlim[1], ylim[0], ylim[1]]
# end except
v = v[0]
if len(v) != 4:
error_msg('v must contain [xmin xmax ymin ymax]')
return
# end if
self.gca.set_xlim([v[0], v[1]])
self.gca.set_ylim([v[2], v[3]])
# end def
def axes(self, *args, **kwargs):
nargs = len(args)
if len(args)==0: return subplot(111, **kwargs)
if nargs>1:
error_msg('Only one non keyword arg to axes allowed')
return
# end if
arg = args[0]
if isinstance(arg, Axes):
self.figmgr.set_current_axes(arg)
ret = arg
else:
rect = arg
ret = self.figmgr.add_axes(rect, **kwargs)
# end if
return ret
# end def
def bar(self, *args, **kwargs):
try: patches = self.gca.bar(*args, **kwargs)
except Exception, msg:
s = exception_to_str(msg)
error_msg(s)
raise RuntimeError(msg)
# end except
return patches
# end def
def cla(self):
self.gca.cla()
# end def
def clf(self):
self.figmgr.clf()
# end def
def errorbar(self, x, y, yerr=None, xerr=None, fmt='b-', ecolor='k',
capsize=3):
try: ret = self.gca.errorbar(x, y, yerr, xerr, fmt, ecolor,
capsize)
except ValueError, msg:
msg = raise_msg_to_str(msg)
error_msg(msg)
else:
return ret
# end try
# end def
def figlegend(self, handles, labels, loc):
l = self.legend(handles, labels, loc)
return l
# end def
def fill(self, *args, **kwargs):
try: patch = self.gca.fill(*args, **kwargs)
except Exception, msg:
s = exception_to_str(msg)
error_msg(s)
raise RuntimeError('Could not exectute fill')
# end except
return patch
# end def
def grid(self, b):
self.gca.grid(b)
# end def
def hist(self, x, bins=10, noplot=0, normed=0, bottom=0):
if noplot: return mlab.hist(x, bins, normed)
else:
try:
ret = self.gca.hist(x, bins, normed, bottom)
except ValueError, msg:
msg = raise_msg_to_str(msg)
error_msg(msg)
raise RuntimeError, msg
return ret
# end if
# end def
def legend(self, *args, **kwargs):
ret = self.gca.legend(*args, **kwargs)
return ret
# end def
def plot(self, *args, **kwargs):
try: lines = self.gca.plot(*args, **kwargs)
except ValueError, msg:
msg = raise_msg_to_str(msg)
error_msg(msg)
return lines
# end def
def savefig(self, *args, **kwargs):
for key in ('dpi', 'facecolor', 'edgecolor'):
if not kwargs.has_key(key):
kwargs[key] = rcParams['savefig.%s'%key]
self.print_figure(*args, **kwargs)
# end def
def scatter(self, *args, **kwargs):
try: patches = self.gca.scatter(*args, **kwargs)
except ValueError, msg:
msg = raise_msg_to_str(msg)
error_msg(msg)
raise RuntimeError, msg
return patches
# end def
def scatter_classic(self, *args, **kwargs):
try: patches = self.gca.scatter_classic(*args, **kwargs)
except ValueError, msg:
msg = raise_msg_to_str(msg)
error_msg(msg)
raise RuntimeError, msg
return patches
# end def
def stem(self, *args, **kwargs):
try: ret = self.gca.stem(*args, **kwargs)
except ValueError, msg:
msg = raise_msg_to_str(msg)
error_msg(msg)
else:
return ret
# end def
def subplot(self, *args, **kwargs):
try:
self.figmgr.add_subplot(*args, **kwargs)
self.gca = self.figmgr.get_current_axis()
except ValueError, msg:
msg = raise_msg_to_str(msg)
error_msg(msg)
raise RuntimeError, msg
return self.gca
# end def
def text(self, x, y, label, fontdict=None, **kwargs):
t = self.gca.text(x, y, label, fontdict, **kwargs)
return t
# end def
def title(self, s, *args, **kwargs):
l = self.gca.set_title(s, *args, **kwargs)
return l
# end def
def vlines(self, *args, **kwargs):
try: lines = self.gca.vlines(*args, **kwargs)
except ValueError, msg:
msg = raise_msg_to_str(msg)
error_msg(msg)
raise RuntimeError, msg
return lines
# end def
def xlabel(self, s, *args, **kwargs):
l = self.gca.set_xlabel(s, *args, **kwargs)
return l
# end def
def ylabel(self, s, *args, **kwargs):
l = self.gca.set_ylabel(s, *args, **kwargs)
return l
# end def
#---------------------------------------------------------------------------
# class MatFrame(wx.MDIChildFrame):
class MatFrame(wx.Frame):
def __init__(self, parent):
#wx.MDIChildFrame.__init__(self, parent, -1, "Matlab WX interface",
# size=(600,600))
wx.Frame.__init__(self, None, -1, "Matlab WX interface",
size=(600,600))
self.figure = figure = MatlabFigure(self)
# histg = figure.hist([1,2,3,4,5,6,7,7,8,9,1,23,4,5,5,6])
histg = figure.bar([1,2,3,4], [10,15, 7, 3], width=1)
line1 = figure.plot([1,2,3,4], [2,3,6,7], 'b-')
line2 = figure.plot([0,10,20], [0,10,20], 'g')
figure.axis([0,30,0,20])
figure.grid(1)
figure.xlabel('Confidence', {'fontsize': 'small'})
figure.ylabel('Count', {'fontsize': 'small'})
figure.legend((line1, line2, histg),
('line1', 'line2', 'histg'),
'upper right')
figure.title('Confidence Histogram')
figure.Bind(wx.EVT_LEFT_DOWN, self.OnSelectBucket)
# end def
def OnSelectBucket(self, event):
xy = self.figure.GetXY(event)
print xy
# end def
#---------------------------------------------------------------------------
class MatlabMDI(wx.MDIParentFrame):
def __init__(self):
wx.MDIParentFrame.__init__(self, None, -1, "Matlab
MDI",size=(900,700))
MatFrame(self)
self.Show()
# end def
class App(wx.App):
"""Application class."""
def OnInit(self):
#MatlabMDI()
frame = MatFrame(self)
frame.Show()
for i in range(100):
frame.figure.draw()
# end for
#self.xframe = MatFrame()
#self.xframe.Show()
#self.xframe.grid(0)
return True
# end def
#---------------------------------------------------------------------------
if __name__ == '__main__':
app = App()
app.MainLoop()
-----Original Message-----
From: John Hunter [mailto:jdh...@ac...]
Sent: Tuesday, June 29, 2004 10:47 AM
To: Schalkwyk, Johan
Cc: mat...@li...
Subject: Re: [Matplotlib-users] Assertion triggered in wxMemory DC
>>>>> "Schalkwyk," == Schalkwyk, Johan <Joh...@sc...>
writes:
Schalkwyk,> Thank you for the help I removed the show() command
Schalkwyk,> from the loop. Now just calling grid(True) multiple
Schalkwyk,> times. On my machine I narrowed the loop to 57 and it
Schalkwyk,> started happening. At 50 it did not.
Perhaps I didn't make myself clear. The way you are using matplotlib
does not make sense. matplotlib has two modes: a "matlab interface"
and an embedded interface. You should not embed the matlab interface
directly into a GUI. The matlab interface does a lot of stuff under
the hood, like creating and managing figures and figure windows,
managing redraws, etc. When you create your own figure window outside
this framework, and then try to use the framework, the result is
undefined. If you are using matplotlib in a GUI, *do not import
matplotlib.matlab*. You need to follow the example of
embedding_in_wx2.py.
Below is your example translated to the GUI interface - on my system,
calling grid until the sun sets presents no problems, and it really
couldn't because all it does is set a boolean. In the matlab
interface, if you have interactive: True in your rc file, calling grid
does a lot more, including repainting the figure. Try running this
example, shaking it, resizing it, etc... and see if you can crash it;
I was unable to cause any problems.
If you have trouble, please let me know, but also consider trying
replacing wx for wxagg, which uses antigrain for drawing and is
probably more stable than wx, which does occasionally show dc related
errors.
By the way, there was an error in your legend code
You had
legend('line', blahblah)
and you need
legend( ('line',), blahblah)
That is, legend expects a list or tuple of strings, not a string.
Schalkwyk,> By the way Kudos for matplotlib. Amazing. I had to dig
Schalkwyk,> around the code and news groups to figure out how to
Schalkwyk,> find the user coordinates of a mouse click. Reading
Schalkwyk,> the code opens your eyes the wonderful design that is
Schalkwyk,> backend dependent.
Thanks. Do you have the src distribution? There is an example in the
examples directory examples/coords_demo.py (works with Tk, GTK and WX)
that shows you how to get the mouse click coordinates. The examples
dir is your first line of defense when you want to figure out
something new. Unfortunately, I forgot to upload the zip file with
the 0.54.2 release, so look here
http://matplotlib.sf.net/examples
Here's the example:
#!/usr/bin/env python
"""
An example of how to use wx or wxagg in an application w/o the toolbar
"""
from matplotlib.numerix import arange, sin, pi
import matplotlib
matplotlib.use('WX')
from matplotlib.backends.backend_wx import FigureCanvasWx as FigureCanvas
from matplotlib.figure import Figure
from wxPython.wx import *
class CanvasFrame(wxFrame):
def __init__(self):
wxFrame.__init__(self,None,-1,
'CanvasFrame',size=(550,350))
self.SetBackgroundColour(wxNamedColor("WHITE"))
self.figure = Figure(figsize=(5,4), dpi=100)
self.ax = self.figure.add_subplot(111)
t = arange(0.0, 2.0, 0.01)
s = sin(2*pi*t)
l = self.ax.plot(t, s, linewidth=1.0)
self.ax.set_xlabel('time (s)')
self.ax.set_ylabel('voltage (mV)')
self.ax.set_title('About as simple as it gets, folks')
self.ax.legend(('line',), loc='upper right')
for i in range(100):
self.ax.grid(True)
self.canvas = FigureCanvas(self, -1, self.figure)
self.sizer = wxBoxSizer(wxVERTICAL)
self.sizer.Add(self.canvas, 1, wxTOP | wxLEFT | wxEXPAND)
# Capture the paint message
EVT_PAINT(self, self.OnPaint)
def OnPaint(self, event):
self.canvas.draw()
class App(wxApp):
def OnInit(self):
'Create the main window and insert the custom frame'
frame = CanvasFrame()
frame.Show(true)
return true
app = App(0)
app.MainLoop()
|
|
From: John H. <jdh...@ac...> - 2004-06-29 15:10:57
|
>>>>> "Schalkwyk," == Schalkwyk, Johan <Joh...@sc...> writes:
Schalkwyk,> Thank you for the help I removed the show() command
Schalkwyk,> from the loop. Now just calling grid(True) multiple
Schalkwyk,> times. On my machine I narrowed the loop to 57 and it
Schalkwyk,> started happening. At 50 it did not.
Perhaps I didn't make myself clear. The way you are using matplotlib
does not make sense. matplotlib has two modes: a "matlab interface"
and an embedded interface. You should not embed the matlab interface
directly into a GUI. The matlab interface does a lot of stuff under
the hood, like creating and managing figures and figure windows,
managing redraws, etc. When you create your own figure window outside
this framework, and then try to use the framework, the result is
undefined. If you are using matplotlib in a GUI, *do not import
matplotlib.matlab*. You need to follow the example of
embedding_in_wx2.py.
Below is your example translated to the GUI interface - on my system,
calling grid until the sun sets presents no problems, and it really
couldn't because all it does is set a boolean. In the matlab
interface, if you have interactive: True in your rc file, calling grid
does a lot more, including repainting the figure. Try running this
example, shaking it, resizing it, etc... and see if you can crash it;
I was unable to cause any problems.
If you have trouble, please let me know, but also consider trying
replacing wx for wxagg, which uses antigrain for drawing and is
probably more stable than wx, which does occasionally show dc related
errors.
By the way, there was an error in your legend code
You had
legend('line', blahblah)
and you need
legend( ('line',), blahblah)
That is, legend expects a list or tuple of strings, not a string.
Schalkwyk,> By the way Kudos for matplotlib. Amazing. I had to dig
Schalkwyk,> around the code and news groups to figure out how to
Schalkwyk,> find the user coordinates of a mouse click. Reading
Schalkwyk,> the code opens your eyes the wonderful design that is
Schalkwyk,> backend dependent.
Thanks. Do you have the src distribution? There is an example in the
examples directory examples/coords_demo.py (works with Tk, GTK and WX)
that shows you how to get the mouse click coordinates. The examples
dir is your first line of defense when you want to figure out
something new. Unfortunately, I forgot to upload the zip file with
the 0.54.2 release, so look here
http://matplotlib.sf.net/examples
Here's the example:
#!/usr/bin/env python
"""
An example of how to use wx or wxagg in an application w/o the toolbar
"""
from matplotlib.numerix import arange, sin, pi
import matplotlib
matplotlib.use('WX')
from matplotlib.backends.backend_wx import FigureCanvasWx as FigureCanvas
from matplotlib.figure import Figure
from wxPython.wx import *
class CanvasFrame(wxFrame):
def __init__(self):
wxFrame.__init__(self,None,-1,
'CanvasFrame',size=(550,350))
self.SetBackgroundColour(wxNamedColor("WHITE"))
self.figure = Figure(figsize=(5,4), dpi=100)
self.ax = self.figure.add_subplot(111)
t = arange(0.0, 2.0, 0.01)
s = sin(2*pi*t)
l = self.ax.plot(t, s, linewidth=1.0)
self.ax.set_xlabel('time (s)')
self.ax.set_ylabel('voltage (mV)')
self.ax.set_title('About as simple as it gets, folks')
self.ax.legend(('line',), loc='upper right')
for i in range(100):
self.ax.grid(True)
self.canvas = FigureCanvas(self, -1, self.figure)
self.sizer = wxBoxSizer(wxVERTICAL)
self.sizer.Add(self.canvas, 1, wxTOP | wxLEFT | wxEXPAND)
# Capture the paint message
EVT_PAINT(self, self.OnPaint)
def OnPaint(self, event):
self.canvas.draw()
class App(wxApp):
def OnInit(self):
'Create the main window and insert the custom frame'
frame = CanvasFrame()
frame.Show(true)
return true
app = App(0)
app.MainLoop()
|
|
From: Schalkwyk, J. <Joh...@sc...> - 2004-06-29 13:42:00
|
Thank you for the help
I removed the show() command from the loop. Now just calling grid(True)
multiple times. On my machine I narrowed the loop to 57 and it started
happening. At 50 it did not.
Another way I found to trigger this problem is to remove the for loop all
together. Then it just pops up the display. Now grab the window with the
mouse and shake the window continuously around, forcing multiple Paint
events. Eventually it triggers the assert. The application I am developing
using multiple matplotlib windows in an MDI window seems to trigger this
quite easily. Everytime a window is added to the MDIParent all MDIChild
windows gets repainted. Something to do with the paint event.
By the way Kudos for matplotlib. Amazing. I had to dig around the code and
news groups to figure out how to find the user coordinates of a mouse click.
Reading the code opens your eyes the wonderful design that is backend
dependent.
import wx
import matplotlib
import time
matplotlib.use('WX')
from matplotlib.matlab import *
class App(wx.App):
"""Application class."""
def OnInit(self):
t = arange(0.0, 2.0, 0.01)
s = sin(2*pi*t)
l = plot(t, s, linewidth=1.0)
xlabel('time (s)')
ylabel('voltage (mV)')
title('About as simple as it gets, folks')
legend('line', loc='upper right')
for i in range(100):
grid(True)
return True
#---------------------------------------------------------------------------
# run the app
app = App()
app.MainLoop()
-----Original Message-----
From: John Hunter [mailto:jdh...@ac...]
Sent: Monday, June 28, 2004 11:17 PM
To: Schalkwyk, Johan
Cc: mat...@li...
Subject: Re: [Matplotlib-users] Assertion triggered in wxMemory DC
>>>>> "Schalkwyk," == Schalkwyk, Johan <Joh...@sc...>
writes:
Schalkwyk,> The code snippet below reproduces the
Schalkwyk,> problem. Basically calling "show()" in a loop forces
Schalkwyk,> repaint of the same window many times. After a while a
Schalkwyk,> strange stack trace appears with the assertion
Schalkwyk,> above. Sometimes the stack trace creates garbage all
Schalkwyk,> over the screen which has to be cleared by repainting
Schalkwyk,> the whole screen.
You should only call show at most once per matplotlib script - for
more information on show see http://matplotlib.sf.net/faq.html#SHOW.
When embedding matplotlib in an application, typically you won't use
show at all.
When embedding matplotlib in a GUI like WX, you should use
canvas.draw() to repaint the figure. See embedding_in_wx.py in the
examples directory of the matplotlib src distribution of the script
embedding_in_wx2.py attached with this email for an example of how to
use matplotlib in a wx app.
I can't promise you this will fix your problem, but will at least make
your example consistent with how matplotlib is meant to be used in a
wx app. If you still get a problem, please post the revised code and
I'll take a look.
Good luck!
JDH
#!/usr/bin/env python
"""
An example of how to use wx or wxagg in an application w/o the toolbar
"""
from matplotlib.numerix import arange, sin, pi
import matplotlib
# uncomment the following to use wx rather than wxagg
#matplotlib.use('WX')
#from matplotlib.backends.backend_wx import FigureCanvasWx as FigureCanvas
# comment out the following to use wx rather than wxagg
matplotlib.use('WXAgg')
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as
FigureCanvas
from matplotlib.figure import Figure
from wxPython.wx import *
class CanvasFrame(wxFrame):
def __init__(self):
wxFrame.__init__(self,None,-1,
'CanvasFrame',size=(550,350))
self.SetBackgroundColour(wxNamedColor("WHITE"))
self.figure = Figure(figsize=(5,4), dpi=100)
self.axes = self.figure.add_subplot(111)
t = arange(0.0,3.0,0.01)
s = sin(2*pi*t)
self.axes.plot(t,s)
self.canvas = FigureCanvas(self, -1, self.figure)
self.sizer = wxBoxSizer(wxVERTICAL)
self.sizer.Add(self.canvas, 1, wxTOP | wxLEFT | wxEXPAND)
# Capture the paint message
EVT_PAINT(self, self.OnPaint)
def OnPaint(self, event):
self.canvas.draw()
class App(wxApp):
def OnInit(self):
'Create the main window and insert the custom frame'
frame = CanvasFrame()
frame.Show(true)
return true
app = App(0)
app.MainLoop()
|
|
From: John H. <jdh...@ac...> - 2004-06-29 03:47:33
|
>>>>> "Andrew" == Andrew Straw <str...@as...> writes:
Andrew> Hi plotters, I've shamelessly modified dynamic_demo_wx.py
Andrew> to create dynamic_image_wxagg.py, attached. This is my
Andrew> initial attempt to get matplotlib to dynamically update
Andrew> images. Basically it all works hunky-dory except 1) an
Andrew> apparent memory leak and 2) flicker when I run this in
Andrew> linux (haven't tested other OSes). I offer #1 to John or
Andrew> other memory-leak hunters out there and ask if any WXpert
Andrew> can address #2. I've googled a bit and it appears the WX
Andrew> backend (from which WXAgg is derived) does the Right Thing
Andrew> and calls wxClientDC on a non-OS generated redraw request,
Andrew> which is supposed to reduce or eliminate flicker. The
Andrew> other tip is to catch EVT_ERASE_BACKGROUND, which I've
Andrew> also done to no apparent improvement. Thus, I ask for help
Andrew> -- any suggestions on how to eliminate this flicker?
Hi Andrew,
Haven't had a chance to test your example yet but hopefully I can take
a look tomorrow. I haven't done much memory leak testing against the
_image module yet so this will be a good opportunity. I very recently
rewrote _image.cpp using cxx. I trust you have a fresh CVS checkout?
As for the flicker problem, I've noticed it too, and would also be
thankful if any wx gurus have some advice.
BTW, wxagg currently uses a string copy in python to render agg to a
wx bitmap via a wx image. It would be nice if some enterprising
soul wrote some extension code ala _tkagg.cpp and _gtkagg.cpp which
transfers the agg canvas to wx directly. Should be a pretty big win
performance wise. We could keep the string method as a fallback in
case the extension wasn't compiled, but it would help for people who
want to use wxagg for dynamic applications (hint hint).
This should at least be on the goals page.
JDH
|
|
From: John H. <jdh...@ac...> - 2004-06-29 03:40:44
|
>>>>> "Schalkwyk," == Schalkwyk, Johan <Joh...@sc...> writes:
Schalkwyk,> The code snippet below reproduces the
Schalkwyk,> problem. Basically calling "show()" in a loop forces
Schalkwyk,> repaint of the same window many times. After a while a
Schalkwyk,> strange stack trace appears with the assertion
Schalkwyk,> above. Sometimes the stack trace creates garbage all
Schalkwyk,> over the screen which has to be cleared by repainting
Schalkwyk,> the whole screen.
You should only call show at most once per matplotlib script - for
more information on show see http://matplotlib.sf.net/faq.html#SHOW.
When embedding matplotlib in an application, typically you won't use
show at all.
When embedding matplotlib in a GUI like WX, you should use
canvas.draw() to repaint the figure. See embedding_in_wx.py in the
examples directory of the matplotlib src distribution of the script
embedding_in_wx2.py attached with this email for an example of how to
use matplotlib in a wx app.
I can't promise you this will fix your problem, but will at least make
your example consistent with how matplotlib is meant to be used in a
wx app. If you still get a problem, please post the revised code and
I'll take a look.
Good luck!
JDH
#!/usr/bin/env python
"""
An example of how to use wx or wxagg in an application w/o the toolbar
"""
from matplotlib.numerix import arange, sin, pi
import matplotlib
# uncomment the following to use wx rather than wxagg
#matplotlib.use('WX')
#from matplotlib.backends.backend_wx import FigureCanvasWx as FigureCanvas
# comment out the following to use wx rather than wxagg
matplotlib.use('WXAgg')
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.figure import Figure
from wxPython.wx import *
class CanvasFrame(wxFrame):
def __init__(self):
wxFrame.__init__(self,None,-1,
'CanvasFrame',size=(550,350))
self.SetBackgroundColour(wxNamedColor("WHITE"))
self.figure = Figure(figsize=(5,4), dpi=100)
self.axes = self.figure.add_subplot(111)
t = arange(0.0,3.0,0.01)
s = sin(2*pi*t)
self.axes.plot(t,s)
self.canvas = FigureCanvas(self, -1, self.figure)
self.sizer = wxBoxSizer(wxVERTICAL)
self.sizer.Add(self.canvas, 1, wxTOP | wxLEFT | wxEXPAND)
# Capture the paint message
EVT_PAINT(self, self.OnPaint)
def OnPaint(self, event):
self.canvas.draw()
class App(wxApp):
def OnInit(self):
'Create the main window and insert the custom frame'
frame = CanvasFrame()
frame.Show(true)
return true
app = App(0)
app.MainLoop()
|
|
From: John H. <jdh...@ac...> - 2004-06-29 03:27:39
|
>>>>> "Charles" == Charles R Twardy <cha...@in...> writes:
Charles> Wow, matplot sure has grown up since I last saw it
Charles> (0.32?). I was trying to get back in the game and tried
Charles> the debian packages from mentors.
Hi Charles, glad to see you back.
Charles> But I can only see the python-matplotlib-doc, not
Charles> python-matplotlib. I'm guessing it hasn't been built for
Charles> PowerPC. I'll try apt-get source when mentors.debian is
Charles> back up (or when I can see it anyway).
I CCd Vittorio, the debian maintainer. I don't know if he's on the
user list. He may have some comments for you.
Cheers,
JDH
|
|
From: Schalkwyk, J. <Joh...@sc...> - 2004-06-28 14:40:34
|
I've been using matplotlib in a WX application. The particular application
can uses many matplotlib figures within a MDI window class. The problem
appears when there are about seven windows active in the MDI, and an eight
is added. This causes a repaint of all seven matplotlib figures, which then
triggers the following assertion
PyAssertionError: C++ assertion "wxAssertFailure" failed in
"..\src\msw\dcmemory.cpp (133): Couldn't select a bitmap into wxMemoryDC
This appears on windows XP professional, Python 2.3, wxPython 2.5.1.5,
matplotlib 0.54.
The code snippet below reproduces the problem. Basically calling "show()" in
a loop forces repaint of the same window many times. After a while a strange
stack trace appears with the assertion above. Sometimes the stack trace
creates garbage all over the screen which has to be cleared by repainting
the whole screen.
import wx
import matplotlib
matplotlib.use('WX')
from matplotlib.matlab import *
class App(wx.App):
"""Application class."""
def OnInit(self):
t = arange(0.0, 2.0, 0.01)
s = sin(2*pi*t)
l = plot(t, s, linewidth=1.0)
xlabel('time (s)')
ylabel('voltage (mV)')
title('About as simple as it gets, folks')
legend('line', loc='upper right')
for i in range(100):
grid(True)
show()
# end for
return True
#---------------------------------------------------------------------------
# run the app
app = App()
app.MainLoop()
|
|
From: Charles R. T. <cha...@in...> - 2004-06-28 02:56:20
|
Wow, matplot sure has grown up since I last saw it (0.32?). I was trying to get back in the game and tried the debian packages from mentors. But I can only see the python-matplotlib-doc, not python-matplotlib. I'm guessing it hasn't been built for PowerPC. I'll try apt-get source when mentors.debian is back up (or when I can see it anyway). -C -- Charles R. Twardy www.csse.monash.edu.au/~ctwardy Monash University sarbayes.org Computer Sci. & Software Eng. +61(3) 9905 5823 (w) 5146 (fax) Allow the president to invade a neighboring nation, whenever he shall deem it necessary to repel an invasion, ... and you allow him to make war at pleasure. --Abraham Lincoln |
|
From: Andrew S. <str...@as...> - 2004-06-26 08:32:11
|
Sorry, I also added the following line to backend_wxagg to get my demo to work: from backend_wx import FigureManager Anyhow, I've added this to CVS, but you can just as easily modify your copy of the affected file. Cheers! Andrew |
|
From: Andrew S. <str...@as...> - 2004-06-26 07:56:31
|
Hi plotters, I've shamelessly modified dynamic_demo_wx.py to create dynamic_image_wxagg.py, attached. This is my initial attempt to get matplotlib to dynamically update images. Basically it all works hunky-dory except 1) an apparent memory leak and 2) flicker when I run this in linux (haven't tested other OSes). I offer #1 to John or other memory-leak hunters out there and ask if any WXpert can address #2. I've googled a bit and it appears the WX backend (from which WXAgg is derived) does the Right Thing and calls wxClientDC on a non-OS generated redraw request, which is supposed to reduce or eliminate flicker. The other tip is to catch EVT_ERASE_BACKGROUND, which I've also done to no apparent improvement. Thus, I ask for help -- any suggestions on how to eliminate this flicker? John -- feel free to stick this in examples if you think it's worthy. Cheers! Andrew |
|
From: John H. <jdh...@ac...> - 2004-06-24 21:22:56
|
>>>>> "Daniele" == Daniele Varrazzo <dva...@vi...> writes:
Daniele> I am testing matplotlib for the first time, but it
Daniele> continuously hang after a really short time.
Daniele> I read all the troubles about running it from an ide, so
Daniele> i'm using plain cmd.
...snip...
Daniele> The Python prompt is still functional. When i try to exit
Daniele> i get (WXAgg backend):
Even in plain command mode "shell", you need a special shell to work
interactively, or you need to use TkAgg. WX* and GTK* both require
special shells to work interactively. It looks from your post that
you are trying to use wxagg from the standard python shell. This is
known not to work. If you want wx + interactive shell, try pycrust.
This is discussed on
http://matplotlib.sourceforge.net/interactive.html.
Your best bet for interactive use on win32 is TkAgg.
You should try setting in C:\Python23\share\matplotlib\.matplotlibrc
backend : TkAgg
interactive : True
and try using either the standard python shell or ipython. If that
works, you should look at the additional setting in your rc file
tk.window_focus : True # Maintain shell focus for TkAgg
Hope this helps,
John Hunter
|
|
From: <mai...@ya...> - 2004-06-24 18:04:12
|
Dear all,
A few days ago, I was trying to install matplotlib
into os x 10.2, with the help from John I have managed
to get it to work at the end.
So please find the following information useful if you
are thinking of building one under the os x Jaguar
environment.
System information: Mac OS X 10.2.8, gcc version 3.1,
Apple X11 Beta 3 and Fink
installed
* make sure zlib, libpng and freetype2 are installed
either in /usr/local or /sw. If you are fink user,
don't install freetype. If you have, remove it,
becuase it will cause confusion for the package to
config later on
* install Numeric or numarray (I did it through
fink, no problem) and change the NUMERIX setting in
setup.py and .matplotlibrc accordingly
* I have also installed pygtk through fink as my
alternative GUI framework (you don't have to if
you don't want it). If you do, you need to add an
extra line onto your .cshrc or .tcshrc to tell where
pkgconfig is on your path (I did the installation
through fink)
setenv PKG_CONFIG_PATH "/sw/lib/pkgconfig"
* Now X11, if you are using Apple X11 Beta 3, you also
need the X11 SDK installed. Then if you haven't
done it, you should also install system-xfree86-42
through fink so that all the required header files
will be in /usr/X11R6/include/X11 and all the
library
files will be in /sw directory
Up to this point if you don't do anything on the
path setting for the X11 header files, you would get
errors like tk.h/tcl.h couldn't find the X11/Xlib.h
file when you compile. There are two ways to tackle
this, depending your own preference. I believe
they both work eventually.
1) create symbolic link from /usr/X11R6/include/X11
to /sw/include/X11, I think the command is like
this (correct me if I am wrong)
ln -s /usr/X11R6/include/X11 /sw/include/
2) include /usr/X11R6/include/X11 as basedir into
your setupext.py of matplotlib
* change the basdir in setupext.py into either
'darwin':['/sw'] or
'darwin':['/usr/X11R6/include/X11','/sw']
according to what you did in previous step
* type 'python setup.py insatll' in root mode or
type 'sudo python setup.py install' otherwise,
sit back and the installation process should go
smoothly
Cheers,
Denis
___________________________________________________________ALL-NEW Yahoo! Messenger - sooooo many all-new ways to express yourself http://uk.messenger.yahoo.com
|