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
|
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
|
|
1
(3) |
2
(1) |
3
(3) |
4
(8) |
5
(5) |
6
(1) |
7
(16) |
8
(7) |
9
(29) |
10
(16) |
11
(8) |
12
(8) |
13
(1) |
14
(17) |
15
(15) |
16
(23) |
17
(20) |
18
(25) |
19
(2) |
20
(3) |
21
(12) |
22
(6) |
23
(11) |
24
(6) |
25
(3) |
26
|
27
(2) |
28
(4) |
29
(19) |
30
(5) |
31
(33) |
|
|
Hi, I have a set of images I want to render with OpenGL, and I do this by doing some calculations, producing an array, then passing this array to OpenGL. Here's the relevant OpenGL call, for reference: gluBuild2DMipmaps(GL_TEXTURE_2D, 1, image.shape[0], image.shape[1], GL_LUMINANCE, GL_UNSIGNED_BYTE, flatImage) flatImage is just image as a flattened, contiguous numpy array... all that matters is that it contains the same values as in image. The problem is that passing my arrays to pylab.imshow() displays them exactly as they are meant to be, but in OpenGL they are 'twisted'. There is an offset that is _different_ for each picture that only seems to be resolved by replacing 'image.shape[0]' by 'image.shape[0]-5' or some other numbers that make the rows shorter. How is it that OpenGL does weird things with the row length but pylab is always happy? I can send pictures of the problem if it helps.... Adeola
Hello again, Just an update to the ginput() I'm using now. If you clicked really fast using the previous version, the event queue would fill up and you'd wind up getting extra clicks in your list. This version fixes that and adds the ability to (a) terminate the collection process with a right click, and (b) set n=0 to keep collecting clicks indefinitely until you right click. It also now returns a 2-d list rather than a list of (,)'s. Cheers, Jack class GaelInput(object): """ Class that creates a callable object to retrieve mouse click in a blocking way, as in MatLab. This is based on Gael Varoquaux's almost-working object. Thanks Gael! I've wanted to get this working for years! -Jack """ debug = False cid = None # event connection object clicks = [] # list of click coordinates n = 1 # number of clicks we're waiting for def on_click(self, event): """ Event handler that will be passed to the current figure to retrieve clicks. """ # write the debug information if we're supposed to if self.debug: print "button "+str(event.button)+": "+str(event.xdata)+", "+str(event.ydata) # if this event's a right click we're done if event.button == 3: self.done = True return # if it's a valid click (and this isn't an extra event # in the queue), append the coordinates to the list if event.inaxes and not self.done: self.clicks.append([event.xdata, event.ydata]) # if we have n data points, we're done if len(self.clicks) >= self.n and self.n is not 0: self.done = True return def __call__(self, n=1, timeout=30, debug=False): """ Blocking call to retrieve n coordinate pairs through mouse clicks. n=1 number of clicks to collect. Set n=0 to keep collecting points until you click with the right mouse button. timeout=30 maximum number of seconds to wait for clicks before giving up. timeout=0 to disable debug=False show each click event coordinates """ # just for printing the coordinates self.debug = debug # connect the click events to the on_click function call self.cid = _pylab.connect('button_press_event', self.on_click) # initialize the list of click coordinates self.clicks = [] # wait for n clicks self.n = n self.done = False t = 0.0 while not self.done: # key step: yield the processor to other threads _wx.Yield(); _time.sleep(0.1) # check for a timeout t += 0.1 if timeout and t > timeout: print "ginput timeout"; break; # All done! Disconnect the event and return what we have _pylab.disconnect(self.cid) self.cid = None return self.clicks def ginput(n=1, timeout=30, debug=False): """ Simple functional call for physicists. This will wait for n clicks from the user and return a list of the coordinates of each click. n=1 number of clicks to collect timeout=30 maximum number of seconds to wait for clicks before giving up. timeout=0 to disable debug=False show debug information """ x = GaelInput() return x(n, timeout, debug)
On Jan 18, 2008, at 8:42 PM, Michael Droettboom wrote: > I think that would be worthwhile just to avoid (well, reduce) these > problems when interface changes occur in the future. Since you were > forced to copy-and-paste poly_editor as a starting point, rather than > inheriting from it, there's little you can do to move forward now > other > than to manually update your own code. Yes, that sucks, and I feel sorry for my self every time I have to do it... > > I'm not opposed to the idea, but maybe we should take a survey of how > it's being used now to make sure whatever it ends up looking like is > sufficient. I of course, am in favor. It might also be a case of 'if we build it, they will come.' -Rob ---- Rob Hetland, Associate Professor Dept. of Oceanography, Texas A&M University http://pong.tamu.edu/~rob phone: 979-458-0096, fax: 979-845-6331
2008年1月10日, Darren Dale <dar...@co...>: > > I think this is fixed. Please update from svn and try again. > > Darren > Fixed, thanks. Francesco
On 2008年1月18日, Jim Vickroy wrote: > I'm guessing that you do not have the following statement in your module: > > * *import pylab as p* > > which is required if you are going to use statements like: > > * *p.plot(...)* > * *p.axis(...)* > * *and so on.* Good catch, Jim! This is the format I was using while I had ... > Of course, you could simply do the following: > > * *import pylab* ... used this form for the import statement. Now, it's sorta' working. That is, I get all plots on one set of axes, not separated by 'street' or 'town', and it displays in a popped up window. Leaves the application hanging in an infinite loop, too. So, now that output is produced, I can start work on getting it correct. Many thanks, Rich -- Richard B. Shepard, Ph.D. | Integrity Credibility Applied Ecosystem Services, Inc. | Innovation <http://www.appl-ecosys.com> Voice: 503-667-4517 Fax: 503-667-8863
Rich Shepard wrote: > I'm hoping that someone's already addressed the need I have so I don't > need to re-invent this wheel. But, if no one has a ready-made solution, I > still need some expert advice in how to build this wheel myself. > > My python application uses the wxPython widget library, SQLite (using the > pysqlite2 library), ReportLab for the reports, and matplotlib for data > plotting. Right now my attention is on writing the function(s) that plot > multiple curves on a common axes set for inclusion in a PDF report. I've > been struggling with this for several days without tripping over the > solution. > > Here's what I'm trying to do, using a town for an analogy. The data on > towns, streets, and houses are stored in database tables. What I want are > plots of all house shapes on each street in each town, in .png format for > inclusion in the ReportLab output. There can be from 1 to 7 houses per > street, and the shapes are defined as distribution curves (e.g., Bell, S-, > Z-, trapezoidal curves). > > In pseudocode, this is what I have: > for each town: > for each street: > hold(True) > if shape == 'first shape': > call functions.firstShape() > if shape == 'second shape': > call functions.secondShape() > etc. > hold() > > This does not work. First, 'hold()' is not known in this module, but all > appropriate matplotlib components are imported. Second, I must not have the > functions correctly written; for example, this error: > > File "/data1/eikos/reports.py", line 421, in inputVals > functions.leftShoulderCurve(self.row[10],self.row[11],self.row[9]) > File "/data1/eikos/functions.py", line 542, in leftShoulderCurve > p.plot(x, y, color='red', lw=2) > NameError: global name 'p' is not defined > I'm guessing that you do not have the following statement in your module: * *import pylab as p* which is required if you are going to use statements like: * *p.plot(...)* * *p.axis(...)* * *and so on.* Of course, you could simply do the following: * *import pylab* and then use statements like: * *pylab.plot(...)* * *and so on* > And here is functions.leftShoulderCurve: > > def leftShoulderCurve(hl, hr, lr): > hiLeft = hl > hiRight = hr > lowRight = lr > x, y = zip(*[(hiLeft, 1.0), (hiRight, 1.0), (lowRight, 0.0)]) > p.plot(x, y, color='red', lw=2) > p.axis([0, 100, 0.0, 1.0]) > p.xlabel('Universe of Discourse') > p.ylabel('Membership Grade') > p.show() > > If I add instance reference of 'self' prepended to 'p.', that throws the > same error. > > What I need is guidance on where to start to be able to produce these > plots. (Display of individual curves will be addressed after I get the > report completed.) > > TIA, > > Rich > >
Do you want to do a 3d plot? You can draw 3d plots and rotate them interactively using matplotlib.axes3d.Axes3D. Have a look at http://www.scipy.org/Cookbook/Matplotlib/mplot3D. Speaking of Axes3D, the picker=True keyword doesn't seem to work properly with the scatter3D function. Is it easy to add the picker functionality to the 3D axes? I'm happy to try doing it, but I'm not sure where to start. Neil > Is there an easy way to rotate the view of the data in a graph window > without changing the axis and titles. I only need the option for 90, 180, > and 270 degrees. The window will always be symmetric. > > Bryan > > -- > "The game of science can accurately be described as a never-ending insult to > human intelligence." - Jo?o Magueijo
Dear All, I'd like to annotate a pcolor or pcolormesh plot by adding boxes around sets of coordinates in the plot. Is there an easy way to do this? Thanks, and all the best, --Buz
Rather than using eqnarray, I like to use the simple split: \begin{equation}\begin{split} &A=1 \\ &B=10000 \end{split}\end{equation} Although this may actually be part of the AMSMath package. Mark > > > ------------------------------ > > Message: 4 > Date: 2008年1月17日 09:29:43 -0500 > From: Darren Dale <dar...@co...> > Subject: Re: [Matplotlib-users] multiline mlath text > To: mat...@li... > Message-ID: <200...@co...> > Content-Type: text/plain; charset="iso-8859-1" > > I dont think newlines are supported this way in tex. Here's an example: > > \documentclass[]{article} > > \begin{document} > > $a=e^{i\pi}\\x=y$ > > $$a=e^{i\pi}\\x=y$$ > > \begin{eqnarray} > a & = & \frac{e^{i\pi}}{e^{-i\pi}} \\ > & = & e^{i2\pi} > \end{eqnarray} > > > \end{document} > >
Hello, With matplotlib-0.91.2 as well as with the latest SVN version I get hoel@pchoel:~> python -ic "from matplotlib import pylab" Found an unknown keyword in AFM header (was MetricsSets) Found an unknown keyword in AFM header (was IsBaseFont) Found an unknown keyword in AFM header (was IsCIDFont) Found an unknown keyword in AFM header (was StartDirection) Found an unknown keyword in AFM header (was EndDirection) Traceback (most recent call last): File "<string>", line 1, in <module> File "/usr/local/lib/python2.5/site-packages/matplotlib/pylab.py", line 2= 08, in <module> from matplotlib import mpl # pulls in most modules File "/usr/local/lib/python2.5/site-packages/matplotlib/mpl.py", line 2, = in <module> from matplotlib import axis File "/usr/local/lib/python2.5/site-packages/matplotlib/axis.py", line 14= , in <module> from font_manager import FontProperties File "/usr/local/lib/python2.5/site-packages/matplotlib/font_manager.py",= line 1132, in <module> _rebuild() File "/usr/local/lib/python2.5/site-packages/matplotlib/font_manager.py",= line 1123, in _rebuild fontManager =3D FontManager() File "/usr/local/lib/python2.5/site-packages/matplotlib/font_manager.py",= line 913, in __init__ self.afmdict =3D createFontDict(self.afmfiles, fontext=3D'afm') File "/usr/local/lib/python2.5/site-packages/matplotlib/font_manager.py",= line 518, in createFontDict prop =3D afmFontProperty(font) File "/usr/local/lib/python2.5/site-packages/matplotlib/font_manager.py",= line 417, in afmFontProperty name =3D font.get_familyname() File "/usr/local/lib/python2.5/site-packages/matplotlib/afm.py", line 440= , in get_familyname return self._header['FamilyName'] KeyError: 'FamilyName' >>> import pdb >>> pdb.pm() > /usr/local/lib/python2.5/site-packages/matplotlib/afm.py(440)get_familyna= me() -> return self._header['FamilyName'] (Pdb) print self._header {'Notice': 'Copyright (c) 1999 Adobe Systems Incorporated. All Rights Reser= ved.', 'Ascender': 883.0, 'FontBBox': [-36, -250, 986, 883], 'Weight': 'Bol= d', 'Descender': -250.0, 'CharacterSet': 'Adobe-Korea1-0', 'IsFixedPitch': = False, 'FontName': 'MunhwaGothic-Bold', 'StartFontMetrics': 4.0999999999999=わ 996, 'CapHeight': 883.0, 'Version': '1.000', 'UnderlinePosition': -100, 'Ch= aracters': 2549, 'UnderlineThickness': 50, 'ItalicAngle': 0.0, 'StartCharMe= trics': 2549} (Pdb)=20 The afm file seems to be=20 rpm -qfi /usr/share/ghostscript/Resource/AFM/MOEKai-Regular.afm Name : CID-keyed-fonts-MOE Relocations: (not relocatable) Version : 20021114 Vendor: SUSE LINUX Products= GmbH, Nuernberg, Germany Release : 234 Build Date: So 26 Nov 2006 02:3= 1:56 CET Install Date: Di 02 Jan 2007 21:53:12 CET Build Host: klempnerei.suse.= de Group : Productivity/Publishing/PS Source RPM: CID-keyed-fonts-MOE= -20021114-234.src.rpm Size : 23618231 License: Contact author, Oth= er License(s), see package Signature : DSA/SHA1, So 26 Nov 2006 02:35:35 CET, Key ID a84edae89c800aca Packager : http://bugs.opensuse.org Summary : MOE CID-Keyed Fonts (for Traditional Chinese) Description : This package contains the CID-keyed fonts MOESung-Regular (Adobe-CNS1-0 subset: 13699 CIDs) MOEKai-Regular (Adobe-CNS1-0 subset: 13699 CIDs) These fonts are useful for traditional Chinese--for Taiwan and Hongkong. The fonts can be used with Ghostscript as well as with X11. Authors: -------- Dr. Ken Lunde <lu...@ad...> Distribution: openSUSE 10.2 (i586) But other Asian fonts seem to be affected as well. Is there a solution besides removing the affected fonts? Thanks Berthold --=20 A: Weil es die Lesbarkeit des Textes verschlechtert. F: Warum ist TOFU so schlimm? A: TOFU F: Was ist das gr=C3=B6=C3=9Fte =C3=84rgernis im Usenet?
Hello again, Between my updating matplotlib and changing my figure refresh method from gcf().canvas.Refresh() to pylab.show(), my colorplots have stopped crashing (so far as I can tell). I've plotted maybe 50 straight with the same figure window *and* randomly slid my colorbar sliders around without a problem. I suspect pylab.show() is responsible. It doesn't cause the whole figure window to flicker when it updates, so I wager it's doing something smarter than me. Consider me a convert. :) Thanks! -Jack On Jan 18, 2008 9:28 AM, Jack Sankey <jac...@gm...> wrote: > Hey Mike, > > Thanks for the speedy reply. I'm using 0.91.1. I'll download .2 and > see if it clears up. If you know it won't, let me know and I'll give > you any information you want :) > > Take care, > Jack > > > On Jan 18, 2008 6:30 AM, Michael Droettboom <md...@st...> wrote: > > What version of matplotlib are you using? Unfortunately, I think this > > is a known issue in 0.90.1 that manifests itself most severely on > > Windows. If you still see it with 0.91.2, let us know and I'll probably > > want some more information from you. > > > > Cheers, > > Mike > > > > > > Jack Sankey wrote: > > > Hello, > > > > > > I wrote a script that loops over some files, plotting them > > > individually with imshow(). In between each file, the program waits > > > for user input and then clears/closes the current figure before making > > > a new one. > > > > > > Roughly 5-10 files into the loop, the script dies, outputting a loop > > > of stuff like this until I close the figure: > > > > > > File "C:\Python25\Lib\site-packages\matplotlib\pyplot.py", line 201, in gcf > > > File "C:\Python25\Lib\site-packages\matplotlib\pyplot.py", line 187, in figure > > > File "C:\Python25\Lib\site-packages\matplotlib\backends\backend_wxagg.py", > > > line 120, in new_figure_manager > > > File "C:\Python25\Lib\site-packages\matplotlib\backends\backend_wx.py", > > > line 1302, in __init__ > > > File "C:\Python25\Lib\site-packages\matplotlib\backends\backend_wxagg.py", > > > line 39, in _get_toolbar > > > File "C:\Python25\Lib\site-packages\matplotlib\backends\backend_wx.py", > > > line 1593, in __init__ > > > File "C:\Python25\Lib\site-packages\matplotlib\backend_bases.py", > > > line 1391, in __init__ > > > File "C:\Python25\Lib\site-packages\matplotlib\backends\backend_wx.py", > > > line 1615, in _init_toolbar > > > File "C:\Python25\Lib\site-packages\matplotlib\backends\backend_wx.py", > > > line 1452, in _load_bitmap > > > File "C:\Python25\Lib\site-packages\wx-2.8-msw-unicode\wx\_gdi.py", > > > line 530, in __init__ > > > PyAssertionError: C++ assertion "IsOpened()" failed at > > > ..\..\src\common\ffile.cpp(187) in wxFFile::Seek(): can't seek on > > > closed file > > > > > > Alternatively, it occasionally will tell me there are too many files > > > open. I have checked and all my file operations include a close(). Any > > > thoughts? I am using wxpython and wxAgg as my backend, with pycrust > > > (pyshell) on windows XP. > > > > > > Thanks, > > > Jack > > > > > > ------------------------------------------------------------------------- > > > This SF.net email is sponsored by: Microsoft > > > Defy all challenges. Microsoft(R) Visual Studio 2008. > > > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > > > _______________________________________________ > > > Matplotlib-users mailing list > > > Mat...@li... > > > 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 > > >
Rob Hetland wrote: > > On Jan 18, 2008, at 7:00 PM, Michael Droettboom wrote: > >> It looks as if poly_editor is broken in 0.91.2 and the trunk. Is that >> your observation as well? > > Yes. > >> >> This has been fixed in SVN (on both the trunk and the 0.91.x branch). >> >> On both versions, the line (that makes up the draggable markers) was >> never added to the axes, so it doesn't get a transform, and all the >> markers are drawn in the lower left. >> >> For the trunk, there were a couple updates to use the new transforms >> methods. Also, numpy arrays (which are now used for the polygon data) >> do not support insertion, so the call to "insert" had to be rewritten as >> creating a new array. > > Yes, I think this is part of the problem, but have not had the time to > dig into it yet. But your description of the problem matches the error > messages I was getting. > > Also, I find this such a useful tool, I wonder if it would be worthwhile > putting it somewhere in the matplotlib tree explicitly? Even better as > a class that could be subclassed.. I think that would be worthwhile just to avoid (well, reduce) these problems when interface changes occur in the future. Since you were forced to copy-and-paste poly_editor as a starting point, rather than inheriting from it, there's little you can do to move forward now other than to manually update your own code. I'm not opposed to the idea, but maybe we should take a survey of how it's being used now to make sure whatever it ends up looking like is sufficient. Cheers, Mike -- Michael Droettboom Science Software Branch Operations and Engineering Division Space Telescope Science Institute Operated by AURA for NASA
On Jan 18, 2008, at 7:00 PM, Michael Droettboom wrote: > It looks as if poly_editor is broken in 0.91.2 and the trunk. Is that > your observation as well? Yes. > > This has been fixed in SVN (on both the trunk and the 0.91.x branch). > > On both versions, the line (that makes up the draggable markers) was > never added to the axes, so it doesn't get a transform, and all the > markers are drawn in the lower left. > > For the trunk, there were a couple updates to use the new transforms > methods. Also, numpy arrays (which are now used for the polygon data) > do not support insertion, so the call to "insert" had to be > rewritten as > creating a new array. Yes, I think this is part of the problem, but have not had the time to dig into it yet. But your description of the problem matches the error messages I was getting. Also, I find this such a useful tool, I wonder if it would be worthwhile putting it somewhere in the matplotlib tree explicitly? Even better as a class that could be subclassed.. -Rob ---- Rob Hetland, Associate Professor Dept. of Oceanography, Texas A&M University http://pong.tamu.edu/~rob phone: 979-458-0096, fax: 979-845-6331
I'm hoping that someone's already addressed the need I have so I don't need to re-invent this wheel. But, if no one has a ready-made solution, I still need some expert advice in how to build this wheel myself. My python application uses the wxPython widget library, SQLite (using the pysqlite2 library), ReportLab for the reports, and matplotlib for data plotting. Right now my attention is on writing the function(s) that plot multiple curves on a common axes set for inclusion in a PDF report. I've been struggling with this for several days without tripping over the solution. Here's what I'm trying to do, using a town for an analogy. The data on towns, streets, and houses are stored in database tables. What I want are plots of all house shapes on each street in each town, in .png format for inclusion in the ReportLab output. There can be from 1 to 7 houses per street, and the shapes are defined as distribution curves (e.g., Bell, S-, Z-, trapezoidal curves). In pseudocode, this is what I have: for each town: for each street: hold(True) if shape == 'first shape': call functions.firstShape() if shape == 'second shape': call functions.secondShape() etc. hold() This does not work. First, 'hold()' is not known in this module, but all appropriate matplotlib components are imported. Second, I must not have the functions correctly written; for example, this error: File "/data1/eikos/reports.py", line 421, in inputVals functions.leftShoulderCurve(self.row[10],self.row[11],self.row[9]) File "/data1/eikos/functions.py", line 542, in leftShoulderCurve p.plot(x, y, color='red', lw=2) NameError: global name 'p' is not defined And here is functions.leftShoulderCurve: def leftShoulderCurve(hl, hr, lr): hiLeft = hl hiRight = hr lowRight = lr x, y = zip(*[(hiLeft, 1.0), (hiRight, 1.0), (lowRight, 0.0)]) p.plot(x, y, color='red', lw=2) p.axis([0, 100, 0.0, 1.0]) p.xlabel('Universe of Discourse') p.ylabel('Membership Grade') p.show() If I add instance reference of 'self' prepended to 'p.', that throws the same error. What I need is guidance on where to start to be able to produce these plots. (Display of individual curves will be addressed after I get the report completed.) TIA, Rich -- Richard B. Shepard, Ph.D. | Integrity Credibility Applied Ecosystem Services, Inc. | Innovation <http://www.appl-ecosys.com> Voice: 503-667-4517 Fax: 503-667-8863
Hey guys, I'm not 100% sure if anyone has solved this problem, but I couldn't find it, so here it is. This is based on a thread by Gael Varoquaux about a year ago. The key element that was missing was the wx.Yield() command, which gives up control of the current thread so the rest of the world can take a whack. I've been trying to figure this out for years, so I'm pretty pumped. :) Thanks Gael! This works for me in pyshell/pycrust using wxAgg. Enjoy! import wx as _wx import pylab as _pylab import time as _time class GaelInput(object): """ Class that creates a callable object to retrieve mouse click in a blocking way, a la MatLab. Based on Gael Varoquaux's almost-working object. Thanks Gael! I've been trying to get this working for years! -Jack """ debug = False cid = None # event connection def on_click(self, event): """ Event handler that will be passed to the current figure to retrive clicks. """ # if it's a valid click, append the coordinates to the list if event.inaxes: self.clicks.append((event.xdata, event.ydata)) if self.debug: print "boom: "+str(event.xdata)+", "+str(event.ydata) def __call__(self, n=1, timeout=30, debug=False): """ Blocking call to retrieve n coordinate pairs through mouse clicks. """ # just for printing the coordinates self.debug = debug # make sure the user isn't messing with us assert isinstance(n, int), "Requires an integer argument" # connect the click events to the on_click function call self.cid = _pylab.connect('button_press_event', self.on_click) # initialize the list of click coordinates self.clicks = [] # wait for n clicks counter = 0 while len(self.clicks) < n: # key step: yield the processor to other threads _wx.Yield(); # rest for a moment _time.sleep(0.1) # check for a timeout counter += 1 if counter > timeout/0.1: print "ginput timeout"; break; # All done! Disconnect the event and return what we have _pylab.disconnect(self.cid) self.cid = None return self.clicks def ginput(n=1, timeout=30, debug=False): """ Simple functional call for physicists. This will wait for n clicks from the user and return a list of the coordinates of each click. """ x = GaelInput() return x(n, timeout, debug)
Jordan Dawe wrote: > Michael Droettboom wrote: >> This is going to be a tricky one, particularly since I don't have >> access to Illustrator. All I know is the eps and pdf output of >> simple_plot.py looks fine for me in ghostscript, acroread, xpdf and >> evince. Even text select copy and paste works fine in acroread (with >> both Type 3 and 42 fonts). So my guess is that unfortunately >> Illustrator is not fully covering the spec, and we've inadvertently >> moved to using a feature it doesn't like. > Just to be clear: Type 3 font output opens fine in illustrator for both > pdf and eps output. Type 42 pdf output opens in illustrator but eps > gives an error. The type 42 eps output opens fine for me in ghostscript > and in Scribus for windows (which probaby is just using gs anyways...?) > Illustrator definitely looks like the picky one here, but it seems > strange to me... isn't eps Adobe's format? Sure, but these formats are complex enough I'm not terribly surprised there's problems. I'm not necessarily blaming Illustrator here, either. >> Now if this really did work in Illustrator in 0.90.x and not now, one >> could start to compare the output by hand and see what the root cause >> may be. If you set "pdf.compression" to 0, the Pdf file becomes >> vaguely readable, and tools such as diff can help to locate >> differences. I would take the output of 0.90.1 and 0.91.2 and compare >> (the SVN trunk will be too different to be useful), and then start >> moving things over piece by piece until it works again. I'm afraid >> that without Illustrator, it will be hard for me to do that. > It was definitely working in illustrator before, and isn't working now. > If there's anything I can do to help, please let me know. Want a type > 42 and type 3 version of my eps output? Maybe it makes sense to work on what causes errors first, and worry about the editing problems second. So, that would probably mean comparing eps with Type 42 from mpl 0.90.1 and 0.91.2. I'll try and get these going and might ask you to try some hacked up files in Illustrator for me as I try to narrow down the real cause. Cheers, Mike -- Michael Droettboom Science Software Branch Operations and Engineering Division Space Telescope Science Institute Operated by AURA for NASA
Michael Droettboom wrote: > This is going to be a tricky one, particularly since I don't have > access to Illustrator. All I know is the eps and pdf output of > simple_plot.py looks fine for me in ghostscript, acroread, xpdf and > evince. Even text select copy and paste works fine in acroread (with > both Type 3 and 42 fonts). So my guess is that unfortunately > Illustrator is not fully covering the spec, and we've inadvertently > moved to using a feature it doesn't like. Just to be clear: Type 3 font output opens fine in illustrator for both pdf and eps output. Type 42 pdf output opens in illustrator but eps gives an error. The type 42 eps output opens fine for me in ghostscript and in Scribus for windows (which probaby is just using gs anyways...?) Illustrator definitely looks like the picky one here, but it seems strange to me... isn't eps Adobe's format? > Now if this really did work in Illustrator in 0.90.x and not now, one > could start to compare the output by hand and see what the root cause > may be. If you set "pdf.compression" to 0, the Pdf file becomes > vaguely readable, and tools such as diff can help to locate > differences. I would take the output of 0.90.1 and 0.91.2 and compare > (the SVN trunk will be too different to be useful), and then start > moving things over piece by piece until it works again. I'm afraid > that without Illustrator, it will be hard for me to do that. It was definitely working in illustrator before, and isn't working now. If there's anything I can do to help, please let me know. Want a type 42 and type 3 version of my eps output? Jordan
Michael Droettboom wrote: > I suspect an explicit conversion to str may be required on your > configuration/platform. (I think you mentioned you were using Windows). Indeed I am. > Can you change line 592 of mathtext.py to read: > > font = FT2Font(str(basename)) > > and let me know if that fixes your problem? If so, I'll commit this > to SVN. It fixed it perfectly. Rob, that configuration you suggested is amazing. Arev Sans is very attractive (once I downloaded and installed it) and now I have all of Matlab's Tex-command goodness! Still errors on the eps output in illustrator (CS3), but the pdf file output opens great in illustrator. Rob, have you tried setting ps.fonttype to 42 and opening the eps output in illustrator? In the files you sent me, it looked like you had ps.fonttype set to 3. Jordan
It looks as if poly_editor is broken in 0.91.2 and the trunk. Is that your observation as well? This has been fixed in SVN (on both the trunk and the 0.91.x branch). On both versions, the line (that makes up the draggable markers) was never added to the axes, so it doesn't get a transform, and all the markers are drawn in the lower left. For the trunk, there were a couple updates to use the new transforms methods. Also, numpy arrays (which are now used for the polygon data) do not support insertion, so the call to "insert" had to be rewritten as creating a new array. See r4878 (trunk) and r4879 (0.91.x maintenance). Cheers, Mike Rob Hetland wrote: > > I do this sort of stuff all of the time. I have a tool that is > interactive, making a polygon that you can edit (similar to poly_editor > in the examples), that is linked to the polygeom class below, but it is > broken in the new transforms release of the code. > > poly_editor is also broken, by the way. You can't insert a point anymore. > > For now, you can use these simpler tools: > > Good luck, > > -Rob > > > > ------------------------------------------------------------------------ > > > > > > > > > > > > On Dec 6, 2007, at 8:39 PM, Venkat Ramanan wrote: > > > >> Hi, >> >> I'm looking for something analogous to Matlab's ginput() and roipoly(). >> >> ginput() basically displays a crosshair on the current figure and allows >> us to select points by clicking on it. It returns the x,y coordinates of >> the points. >> >> roipoly() allows us to define a polygon by clicking on the figure and >> returns a logical matrix, where ones represent the insides of the >> polygon and zeros outside. >> >> Any pointers are appreciated. >> >> I recently found matplotlib and started porting some of my Matlab >> scripts to it. >> >> Ubuntu feisty (7.04), matplotlib 0.87.7. I can upgrade though. >> >> Thanks, >> Venkat. >> >> ------------------------------------------------------------------------- >> SF.Net email is sponsored by: The Future of Linux Business White Paper >> from Novell. From the desktop to the data center, Linux is going >> mainstream. Let it simplify your IT future. >> http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4 >> _______________________________________________ >> Matplotlib-users mailing list >> Mat...@li... >> https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > > ---- > > Rob Hetland, Associate Professor > > Dept. of Oceanography, Texas A&M University > > http://pong.tamu.edu/~rob > > phone: 979-458-0096, fax: 979-845-6331 > > > > > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > > > ------------------------------------------------------------------------ > > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > 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
lasso_demo.py is working again on the trunk. The problem was not transforms related. The problem is in the way the colors were being updated after the markers were selected. On the trunk, the set of facecolors in a collection is stored as a numpy array for efficiency. This meant that the facecolor Python list that lasso_demo.py was updating was no longer the same object as the facecolor Numpy array that was actually used for drawing. I added a get_facecolors() method to Collection, and that is now used to update the colors in the collection. See r4877 for a set of changes. http://matplotlib.svn.sourceforge.net/viewvc/matplotlib?view=rev&revision=4877 Cheers, Mike Michael Droettboom wrote: > John Hunter wrote: >> On Jan 4, 2008 4:33 PM, Mephisto <dr_...@ho...> wrote: >>> For some simple but effective Python code you can use to create a mask >>> similar to that provided by the Matlab roipoly function, see >>> http://www.ariel.com.au/a/python-point-int-poly.html >>> http://www.ariel.com.au/a/python-point-int-poly.html . The code seems >>> to be >>> quite effective. >> >> matplotlib implements these algorithms in C -- see >> matplotlib.nxutils.pnpoly for a testing inclusion of a single point, >> and matplotlib.nxutils.points_inside_poly for testing multiple points. >> There is some example code using the latter function at >> http://matplotlib.sf.net/examples/lasso_demo.py. Not sure why this >> example is not working for Venkat. > > This is probably not the reason for Venkat (I think he said he was using > 0.87)... but lasso_demo.py is currently broken on the trunk, and working > for me in 0.91.2. I'm looking into it. > > Cheers, > Mike > -- Michael Droettboom Science Software Branch Operations and Engineering Division Space Telescope Science Institute Operated by AURA for NASA
Is it possible to generate pcolor and pcontour plots from x,y,z grid data using plotfile()? The documentation and examples make it appear to only be useful for multi-line plots. I'm not having much success otherwise. Thanks, Rich
This is going to be a tricky one, particularly since I don't have access to Illustrator. All I know is the eps and pdf output of simple_plot.py looks fine for me in ghostscript, acroread, xpdf and evince. Even text select copy and paste works fine in acroread (with both Type 3 and 42 fonts). So my guess is that unfortunately Illustrator is not fully covering the spec, and we've inadvertently moved to using a feature it doesn't like. Now if this really did work in Illustrator in 0.90.x and not now, one could start to compare the output by hand and see what the root cause may be. If you set "pdf.compression" to 0, the Pdf file becomes vaguely readable, and tools such as diff can help to locate differences. I would take the output of 0.90.1 and 0.91.2 and compare (the SVN trunk will be too different to be useful), and then start moving things over piece by piece until it works again. I'm afraid that without Illustrator, it will be hard for me to do that. No other obvious thoughts pop to mind at the moment, but I'll keep thinking about it in a background process and let you know if I think of anything. Cheers, Mike Rob Hetland wrote: > > Off the list because of the figures..... > > Here is an example of a pdf and eps produced from the latest svn (with > the transforms that broke my polygon editors....) > > Illustrator (my version is from CS3) looks identical to the screen > grabs. The text in the eps is not editable (it is the frame of the > characters), the text in the pdf _is_ editable, but the characters are > all single, so, for example cool is a series of independent characters. > > Note the yaxis text in the pdf is offset. It looks the same in other > viewers, so it is not Illustrators fault. > > -Rob > > > ------------------------------------------------------------------------ > > > ------------------------------------------------------------------------ > > > > > > On Jan 17, 2008, at 2:55 PM, Michael Droettboom wrote: > >> There was a change between 0.90 to 0.91 as to how the TrueType to Type >> 42 (which is essentially a thin wrapper around a TrueType font) >> conversion is done. In 0.90 it was done in Python -- in 0.91 when font >> subsetting was added, this conversion is done in some borrowed C code >> called "ttconv". That's just a guess as to what may be the specific >> cause. I don't have a copy of Illustrator, so I haven't done any >> testing with that. I'm happy to hear of a positive report from Rob. >> Perhaps you both (Rob and Jordan) are using different versions of >> Illustrator? >> >> Note that ps.useafm essentially overrides the ps.fonttype setting. If >> ps.useafm is True, you will always only get one of the 14 "builtin" >> Postscript fonts, which are not embedded in the file because all >> Postscript interpreters are required to support them. If ps.useafm is >> False, then the other setting kicks in. Type 42 essentially includes >> the whole Truetype font somewhat verbatim in the Ps file. Type 3 will >> include only the used characters, using a format that is more native to >> Postscript. >> >> All of them *should* be able to be editable on a purely theoretical >> level, though I would imagine Type 3 to be broken if you try to add a >> character that wasn't embedded in the file. (This is different from how >> matplotlib does SVG font embedding where the original text really is >> lost). But I don't really know what Illustrator's abilities and >> limitations are in that regard. >> >> Hopefully Rob's suggestions will work for you. Otherwise, I may want to >> revisit pulling the old Type 42 code back out of SVN to see if that >> solves your problem. A good place to start might be if you could send >> me (off list) two eps files of the same plot -- one created with 0.90.1, >> and one with 0.91.2. >> >> Cheers, >> Mike >> >> Rob Hetland wrote: >>> There have been quite a few changes to fonts in MPL since 8.x. >>> Perhaps one of the biggest is mathtext. Real unicode fonts with >>> mathematics. Since you do what I do, sort of, I am guessing that you >>> might be happy with the same configuration I use. I looks great, and >>> can be edited in Illustrator (et al.). >>> >>> I really like Arev Sans, but others like the new STIX fonts. This >>> setup is for Arev Sans. The important stuff is what begins with >>> mathtext. If you want serif fonts, this should be enough to get you >>> started on customizing. Just make sure whatever fontset you pick has >>> all of the math symbols built in, or change fallback_to_cm to True. >>> >>> -Rob >>> >>> >>> font.family : sans-serif >>> font.style : normal >>> font.variant : normal >>> font.weight : medium >>> font.stretch : normal >>> font.size : 12.0 >>> font.serif : STIX, Bitstream Vera Serif, New Century >>> Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, >>> Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif >>> font.sans-serif : Arev Sans >>> font.cursive : Zapfino, Apple Chancery, Textile, Sand, cursive >>> font.fantasy : Chicago, Comic Sans MS, Charcoal, Impact, >>> Western, fantasy >>> font.monospace : Bitstream Vera Sans Mono, Andale Mono, Nimbus >>> Mono L, Courier New, Courier, Fixed, Terminal, monospace >>> >>> >>> text.color : black >>> text.usetex : False >>> text.dvipnghack : True >>> >>> mathtext.fallback_to_cm : False >>> mathtext.fontset : custom >>> >>> mathtext.cal : Arev Sans:oblique >>> mathtext.it : Arev Sans:oblique >>> mathtext.rm : Arev Sans >>> mathtext.bf : Arev Sans:bold >>> mathtext.sf : Arev Sans >>> >>> pdf.fonttype : 42 >>> >>> >>> >>> >>> >>> On Jan 16, 2008, at 10:13 PM, Jordan Dawe wrote: >>> >>>> Setting ps.useafm = True while ps.fonttype = 42 allows illustrator to >>>> open the eps files again and gives me back text editing capability, >>>> but >>>> I don't have any control over the typeface anymore, it just >>>> defaults to >>>> Helvetica. >>>> >>>> Jordan >>>> >>>> ---------------------------------------------------------------------- >>>> --- >>>> This SF.net email is sponsored by: Microsoft >>>> Defy all challenges. Microsoft(R) Visual Studio 2008. >>>> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ >>>> _______________________________________________ >>>> Matplotlib-users mailing list >>>> Mat...@li... >>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users >>> >>> ---- >>> Rob Hetland, Associate Professor >>> Dept. of Oceanography, Texas A&M University >>> http://pong.tamu.edu/~rob >>> phone: 979-458-0096, fax: 979-845-6331 >>> >>> >>> >>> ------------------------------------------------------------------------- >>> >>> This SF.net email is sponsored by: Microsoft >>> Defy all challenges. Microsoft(R) Visual Studio 2008. >>> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ >>> _______________________________________________ >>> Matplotlib-users mailing list >>> Mat...@li... >>> 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 2008. >> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ >> _______________________________________________ >> Matplotlib-users mailing list >> Mat...@li... >> https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > ---- > Rob Hetland, Associate Professor > Dept. of Oceanography, Texas A&M University > http://pong.tamu.edu/~rob > phone: 979-458-0096, fax: 979-845-6331 > -- Michael Droettboom Science Software Branch Operations and Engineering Division Space Telescope Science Institute Operated by AURA for NASA
Is there an easy way to rotate the view of the data in a graph window without changing the axis and titles. I only need the option for 90, 180, and 270 degrees. The window will always be symmetric. Bryan --=20 "The game of science can accurately be described as a never-ending insult t= o human intelligence." - Jo=E3o Magueijo
What version of matplotlib are you using? Unfortunately, I think this is a known issue in 0.90.1 that manifests itself most severely on Windows. If you still see it with 0.91.2, let us know and I'll probably want some more information from you. Cheers, Mike Jack Sankey wrote: > Hello, > > I wrote a script that loops over some files, plotting them > individually with imshow(). In between each file, the program waits > for user input and then clears/closes the current figure before making > a new one. > > Roughly 5-10 files into the loop, the script dies, outputting a loop > of stuff like this until I close the figure: > > File "C:\Python25\Lib\site-packages\matplotlib\pyplot.py", line 201, in gcf > File "C:\Python25\Lib\site-packages\matplotlib\pyplot.py", line 187, in figure > File "C:\Python25\Lib\site-packages\matplotlib\backends\backend_wxagg.py", > line 120, in new_figure_manager > File "C:\Python25\Lib\site-packages\matplotlib\backends\backend_wx.py", > line 1302, in __init__ > File "C:\Python25\Lib\site-packages\matplotlib\backends\backend_wxagg.py", > line 39, in _get_toolbar > File "C:\Python25\Lib\site-packages\matplotlib\backends\backend_wx.py", > line 1593, in __init__ > File "C:\Python25\Lib\site-packages\matplotlib\backend_bases.py", > line 1391, in __init__ > File "C:\Python25\Lib\site-packages\matplotlib\backends\backend_wx.py", > line 1615, in _init_toolbar > File "C:\Python25\Lib\site-packages\matplotlib\backends\backend_wx.py", > line 1452, in _load_bitmap > File "C:\Python25\Lib\site-packages\wx-2.8-msw-unicode\wx\_gdi.py", > line 530, in __init__ > PyAssertionError: C++ assertion "IsOpened()" failed at > ..\..\src\common\ffile.cpp(187) in wxFFile::Seek(): can't seek on > closed file > > Alternatively, it occasionally will tell me there are too many files > open. I have checked and all my file operations include a close(). Any > thoughts? I am using wxpython and wxAgg as my backend, with pycrust > (pyshell) on windows XP. > > Thanks, > Jack > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > 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
I suspect an explicit conversion to str may be required on your configuration/platform. (I think you mentioned you were using Windows). Can you change line 592 of mathtext.py to read: font = FT2Font(str(basename)) and let me know if that fixes your problem? If so, I'll commit this to SVN. Note that you may also have problems if there are any non-ascii characters (with accents etc.) anywhere in the path to mpl's fonts. In general mpl doesn't really handle Unicode paths correctly wherever C/C++ code is involved. Hopefully that can be resolved in a future version. Cheers, Mike Jordan Dawe wrote: > Rob Hetland wrote: >> I really like Arev Sans, but others like the new STIX fonts. This >> setup is for Arev Sans. The important stuff is what begins with >> mathtext. If you want serif fonts, this should be enough to get you >> started on customizing. Just make sure whatever fontset you pick has >> all of the math symbols built in, or change fallback_to_cm to True. > When I converted my matplotlibrc to the settings you listed, the result > was pages and pages of exception tracebacks ending in: > > C:\Python25\Lib\site-packages\matplotlib\mathtext.py in _get_font(self, > font) > 590 cached_font = self._fonts.get(basename) > 591 if cached_font is None: > --> 592 font = FT2Font(basename) > 593 cached_font = self.CachedFont(font) > 594 self._fonts[basename] = cached_font > > If I remove all the LaTeX from my expressions, this error goes away. > > Jordan > > TypeError: cannot return std::string from Unicode object > > > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > 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