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
(4) |
2
(20) |
3
(8) |
4
(10) |
5
(4) |
6
(8) |
7
(4) |
8
(9) |
9
(11) |
10
(12) |
11
(13) |
12
(3) |
13
(17) |
14
(4) |
15
|
16
(10) |
17
(9) |
18
(11) |
19
(4) |
20
(17) |
21
(6) |
22
(9) |
23
(35) |
24
(17) |
25
(9) |
26
(16) |
27
(17) |
28
(14) |
I'm plotting upper and lower limits via the lolims and uplims keywords to the errorbar function and have noticed two problems. First, the direction of the arrows produced by these keywords are opposite to one would expect, i.e. lolims=True should produce an upward-pointing arrow and uplims should produce a downward-pointing arrow. For example, a "lower-limit" means the exact value is unknown, but it is known not to be below a particular value -- this is denoted by an upward arrow whose starting point (arrow base) is at the value of the lower limit. The xlolims and yuplims have this similar reversed behavior. The second point deals with the starting point of the arrow base. For limits, the arrow should begin at the value of upper/lower limit. Currently the arrows are centered at the limit value. To summarize both issues with an example: errorbar(10, 10, yerr=1, uplims=True) should produce a downward pointing arrow whose base is at (10, 10) and whose head is at (10, 9). It currently produces an upward-pointing arrow whose base is at (10,9) and whose head is at (10, 11). Thanks, Larry
Ryan May wrote: >> > Try changing your plot limits. :) > > pylab.xlim(-3,3) > pylab.ylim(-3,3) > Aha! Perfect; thank you! I'll fix this in Sage now... Jason
On Fri, Feb 13, 2009 at 2:30 PM, <jas...@cr...> wrote: > Eric Firing wrote: > >> Ryan May wrote: >> >>> On Fri, Feb 13, 2009 at 12:08 PM, <jas...@cr... <mailto: >>> jas...@cr...>> wrote: >>> >>> >>> A student of mine recently noticed that sometimes, quiver plots were >>> coming up empty (using the plot_vector_field function from Sage, which >>> passes everything on to quiver). Upon investigation, we saw that some >>> of the array entries passed in were infinity because of where we >>> happened to evaluate the function. It was relatively easy to correct >>> in >>> our case (change the evaluation to miss the bad point), but is there a >>> better way to handle this? Can this be considered a bug in quiver >>> (i.e., >>> returning a blank plot when one of the vectors has an infinite >>> coordinate?). >>> >>> Here is some example code illustrating the problem: >>> >>> >>> import pylab >>> import numpy >>> step=1 >>> X,Y = numpy.meshgrid( >>> numpy.arange(-1,1.1,step),numpy.arange(-1,1.1,step) ) >>> U = 1/X >>> V = Y >>> pylab.figure() >>> Q = pylab.quiver( X,Y,U, V) >>> pylab.savefig("test.png") >>> >>> When you change step to something that avoids an evaluation at x=0 >>> (say, >>> step=0.13), you get a nice plot. >>> >>> Is this something that we should be preprocessing in Sage before >>> calling >>> quiver, masking those "bad" points or something? I haven't used >>> masking >>> before, but I'd like to fix Sage's plot_vector_field function to >>> return >>> something sensible, even when the function happens to be infinite at >>> one >>> of the points. >>> >>> >>> I'm not sure why quiver does not plot any arrows in that case, but it's >>> also easy enough to mask out the values yourself: >>> >>> U = 1/X >>> U = numpy.ma.array(U, mask=numpy.isinf(U)) >>> V = Y >>> V = numpy.ma.array(V, mask=numpy.isinf(V)) >>> >>> You can also catch NaN values by using ~numpy.isfinite() instead of >>> numpy.isinf(). >>> >> >> This is a good use case for numpy.ma.masked_invalid: >> >> In [2]:numpy.ma.masked_invalid? >> Type: function >> Base Class: <type 'function'> >> String Form: <function masked_invalid at 0xb62bccdc> >> Namespace: Interactive >> File: /usr/local/lib/python2.5/site-packages/numpy/ma/core.py >> Definition: numpy.ma.masked_invalid(a, copy=True) >> Docstring: >> Mask the array for invalid values (NaNs or infs). >> Any preexisting mask is conserved. >> >> > Thanks for both of your replies. So I tried the following: > > import pylab > import numpy > step=1 > X,Y = numpy.meshgrid( numpy.arange(-1,1.1,step),numpy.arange(-1,1.1,step) ) > U = numpy.ma.masked_invalid(1/X) > V = numpy.ma.masked_invalid(Y) > pylab.figure() > Q = pylab.quiver( X,Y,U, V) > pylab.savefig("test.png") > > and I still didn't get a plot. I noticed two things: > > 1. The unmasked portion of each array might be different; I hope quiver can > handle that. > > 2. Even when I called pylab.quiver(X,Y,U,U) (so that the masks lined up), I > still didn't get a plot. > > Does quiver handle masks properly, or did I just do something wrong? > It should, but there was a release with a bug in the masked support for quiver. What version are you running? import matplotlib; print matplotlib.__version__ Ryan -- Ryan May Graduate Research Assistant School of Meteorology University of Oklahoma Sent from: Norman Oklahoma United States.
Eric Firing wrote: > Ryan May wrote: >> On Fri, Feb 13, 2009 at 12:08 PM, <jas...@cr... >> <mailto:jas...@cr...>> wrote: >> >> >> A student of mine recently noticed that sometimes, quiver plots were >> coming up empty (using the plot_vector_field function from Sage, >> which >> passes everything on to quiver). Upon investigation, we saw that >> some >> of the array entries passed in were infinity because of where we >> happened to evaluate the function. It was relatively easy to >> correct in >> our case (change the evaluation to miss the bad point), but is >> there a >> better way to handle this? Can this be considered a bug in quiver >> (i.e., >> returning a blank plot when one of the vectors has an infinite >> coordinate?). >> >> Here is some example code illustrating the problem: >> >> >> import pylab >> import numpy >> step=1 >> X,Y = numpy.meshgrid( >> numpy.arange(-1,1.1,step),numpy.arange(-1,1.1,step) ) >> U = 1/X >> V = Y >> pylab.figure() >> Q = pylab.quiver( X,Y,U, V) >> pylab.savefig("test.png") >> >> When you change step to something that avoids an evaluation at >> x=0 (say, >> step=0.13), you get a nice plot. >> >> Is this something that we should be preprocessing in Sage before >> calling >> quiver, masking those "bad" points or something? I haven't used >> masking >> before, but I'd like to fix Sage's plot_vector_field function to >> return >> something sensible, even when the function happens to be infinite >> at one >> of the points. >> >> >> I'm not sure why quiver does not plot any arrows in that case, but >> it's also easy enough to mask out the values yourself: >> >> U = 1/X >> U = numpy.ma.array(U, mask=numpy.isinf(U)) >> V = Y >> V = numpy.ma.array(V, mask=numpy.isinf(V)) >> >> You can also catch NaN values by using ~numpy.isfinite() instead of >> numpy.isinf(). > > This is a good use case for numpy.ma.masked_invalid: > > In [2]:numpy.ma.masked_invalid? > Type: function > Base Class: <type 'function'> > String Form: <function masked_invalid at 0xb62bccdc> > Namespace: Interactive > File: /usr/local/lib/python2.5/site-packages/numpy/ma/core.py > Definition: numpy.ma.masked_invalid(a, copy=True) > Docstring: > Mask the array for invalid values (NaNs or infs). > Any preexisting mask is conserved. > Thanks for both of your replies. So I tried the following: import pylab import numpy step=1 X,Y = numpy.meshgrid( numpy.arange(-1,1.1,step),numpy.arange(-1,1.1,step) ) U = numpy.ma.masked_invalid(1/X) V = numpy.ma.masked_invalid(Y) pylab.figure() Q = pylab.quiver( X,Y,U, V) pylab.savefig("test.png") and I still didn't get a plot. I noticed two things: 1. The unmasked portion of each array might be different; I hope quiver can handle that. 2. Even when I called pylab.quiver(X,Y,U,U) (so that the masks lined up), I still didn't get a plot. Does quiver handle masks properly, or did I just do something wrong? Jason
Ryan May wrote: > On Fri, Feb 13, 2009 at 12:08 PM, <jas...@cr... > <mailto:jas...@cr...>> wrote: > > > A student of mine recently noticed that sometimes, quiver plots were > coming up empty (using the plot_vector_field function from Sage, which > passes everything on to quiver). Upon investigation, we saw that some > of the array entries passed in were infinity because of where we > happened to evaluate the function. It was relatively easy to correct in > our case (change the evaluation to miss the bad point), but is there a > better way to handle this? Can this be considered a bug in quiver (i.e., > returning a blank plot when one of the vectors has an infinite > coordinate?). > > Here is some example code illustrating the problem: > > > import pylab > import numpy > step=1 > X,Y = numpy.meshgrid( > numpy.arange(-1,1.1,step),numpy.arange(-1,1.1,step) ) > U = 1/X > V = Y > pylab.figure() > Q = pylab.quiver( X,Y,U, V) > pylab.savefig("test.png") > > When you change step to something that avoids an evaluation at x=0 (say, > step=0.13), you get a nice plot. > > Is this something that we should be preprocessing in Sage before calling > quiver, masking those "bad" points or something? I haven't used masking > before, but I'd like to fix Sage's plot_vector_field function to return > something sensible, even when the function happens to be infinite at one > of the points. > > > I'm not sure why quiver does not plot any arrows in that case, but it's > also easy enough to mask out the values yourself: > > U = 1/X > U = numpy.ma.array(U, mask=numpy.isinf(U)) > V = Y > V = numpy.ma.array(V, mask=numpy.isinf(V)) > > You can also catch NaN values by using ~numpy.isfinite() instead of > numpy.isinf(). This is a good use case for numpy.ma.masked_invalid: In [2]:numpy.ma.masked_invalid? Type: function Base Class: <type 'function'> String Form: <function masked_invalid at 0xb62bccdc> Namespace: Interactive File: /usr/local/lib/python2.5/site-packages/numpy/ma/core.py Definition: numpy.ma.masked_invalid(a, copy=True) Docstring: Mask the array for invalid values (NaNs or infs). Any preexisting mask is conserved. Eric > > Ryan > > -- > Ryan May > Graduate Research Assistant > School of Meteorology > University of Oklahoma > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA > -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise > -Strategies to boost innovation and cut costs with open source participation > -Receive a 600ドル discount off the registration fee with the source code: SFAD > http://p.sf.net/sfu/XcvMzF8H > > > ------------------------------------------------------------------------ > > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users
On Fri, Feb 13, 2009 at 12:08 PM, <jas...@cr...> wrote: > > A student of mine recently noticed that sometimes, quiver plots were > coming up empty (using the plot_vector_field function from Sage, which > passes everything on to quiver). Upon investigation, we saw that some > of the array entries passed in were infinity because of where we > happened to evaluate the function. It was relatively easy to correct in > our case (change the evaluation to miss the bad point), but is there a > better way to handle this? Can this be considered a bug in quiver (i.e., > returning a blank plot when one of the vectors has an infinite > coordinate?). > > Here is some example code illustrating the problem: > > > import pylab > import numpy > step=1 > X,Y = numpy.meshgrid( numpy.arange(-1,1.1,step),numpy.arange(-1,1.1,step) ) > U = 1/X > V = Y > pylab.figure() > Q = pylab.quiver( X,Y,U, V) > pylab.savefig("test.png") > > When you change step to something that avoids an evaluation at x=0 (say, > step=0.13), you get a nice plot. > > Is this something that we should be preprocessing in Sage before calling > quiver, masking those "bad" points or something? I haven't used masking > before, but I'd like to fix Sage's plot_vector_field function to return > something sensible, even when the function happens to be infinite at one > of the points. > I'm not sure why quiver does not plot any arrows in that case, but it's also easy enough to mask out the values yourself: U = 1/X U = numpy.ma.array(U, mask=numpy.isinf(U)) V = Y V = numpy.ma.array(V, mask=numpy.isinf(V)) You can also catch NaN values by using ~numpy.isfinite() instead of numpy.isinf(). Ryan -- Ryan May Graduate Research Assistant School of Meteorology University of Oklahoma
You can pass "extent=(left, right, bottom, top)" to imshow to specify what the pixels in the array correspond to in data space. Mike Lewis, Ambrose J. wrote: > > Hi All: > > I’m working on a wxPython GUI that uses matplotlib. > > This program reads "chunks" of a data file into a numpy array and than > plots it using imshow. > > The first chunk works great. But, when I load chunks 2 to N, how can I > specify the different values for the labels on the x axis? > > I tried using "axes.set_xlim". This did reposition the x axis as > hoped, but the data is always being drawn back at the "zero" offset. > > Is there a way to tell the axis to map the array to a different x range? > > I can’t read the whole file at once, it’s just too big > > THANXS > > amb > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA > -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise > -Strategies to boost innovation and cut costs with open source participation > -Receive a 600ドル discount off the registration fee with the source code: SFAD > http://p.sf.net/sfu/XcvMzF8H > ------------------------------------------------------------------------ > > _______________________________________________ > 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
On Fri, Feb 13, 2009 at 12:01 PM, Lewis, Ambrose J. < AMB...@sa...> wrote: > Hi All: > > I'm working on a wxPython GUI that uses matplotlib. > > This program reads "chunks" of a data file into a numpy array and than > plots it using imshow. > > The first chunk works great. But, when I load chunks 2 to N, how can I > specify the different values for the labels on the x axis? > > I tried using "axes.set_xlim". This did reposition the x axis as hoped, > but the data is always being drawn back at the "zero" offset. > > Is there a way to tell the axis to map the array to a different x range? > > I can't read the whole file at once, it's just too big > Does the 'extent' keyword argument to imshow do what you want? Ryan -- Ryan May Graduate Research Assistant School of Meteorology University of Oklahoma Sent from: Norman Oklahoma United States.
A student of mine recently noticed that sometimes, quiver plots were coming up empty (using the plot_vector_field function from Sage, which passes everything on to quiver). Upon investigation, we saw that some of the array entries passed in were infinity because of where we happened to evaluate the function. It was relatively easy to correct in our case (change the evaluation to miss the bad point), but is there a better way to handle this? Can this be considered a bug in quiver (i.e., returning a blank plot when one of the vectors has an infinite coordinate?). Here is some example code illustrating the problem: import pylab import numpy step=1 X,Y = numpy.meshgrid( numpy.arange(-1,1.1,step),numpy.arange(-1,1.1,step) ) U = 1/X V = Y pylab.figure() Q = pylab.quiver( X,Y,U, V) pylab.savefig("test.png") When you change step to something that avoids an evaluation at x=0 (say, step=0.13), you get a nice plot. Is this something that we should be preprocessing in Sage before calling quiver, masking those "bad" points or something? I haven't used masking before, but I'd like to fix Sage's plot_vector_field function to return something sensible, even when the function happens to be infinite at one of the points. Thanks, Jason -- Jason Grout
Hi All: I'm working on a wxPython GUI that uses matplotlib. This program reads "chunks" of a data file into a numpy array and than plots it using imshow. The first chunk works great. But, when I load chunks 2 to N, how can I specify the different values for the labels on the x axis? I tried using "axes.set_xlim". This did reposition the x axis as hoped, but the data is always being drawn back at the "zero" offset. Is there a way to tell the axis to map the array to a different x range? I can't read the whole file at once, it's just too big THANXS amb
On Fri, Feb 13, 2009 at 3:24 AM, Richard Jennings <rpj...@gm...>wrote: > Hi, > > I am not expert in matplotlib, I use it to generate plots for a management > performance tool. > > I have just upgraded this application from 0.98.3 to 0.98.5 and the > upgrade broke the application in 3 places: > > > > 1). In units.py, Registry.get_converter(): this method has been made > recursive in 0.98.5. The problem is that if x is a string then you get a > recursion error. > > The cause is the 'iterable() function called in the line "if converter is > None and interable(x):" The interable() function is in cbook.py and it > actually tests to see if the object 'x' has a __len__() method. Call > iterable() on a string and it returns true. > > Do " for thisx in x:" and you will always get the first character in the > string, which is.... a string! > > My solution was to change iterable(): > > Def iterable(obj): > > """ > > Return true if **obj** is iterable > > """ > > try: obj.__iter__() > > except AtributeError: return False > > return True > > > > this seems to have solved the problem. > This has been fixed on the SVN trunk. FYI, the problem with your fix above is that, in general, we want strings to be considered iterable -- just not in this case. It should also be noted that the purpose of the fix was to eliminate the confusing infinite recursion. The fact that plotting strings of numbers works is a coincidence of how matplotlib is coded up and really should not be considered a supported feature. Ryan -- Ryan May Graduate Research Assistant School of Meteorology University of Oklahoma Sent from: Norman Oklahoma United States.
On Fri, Feb 13, 2009 at 6:24 AM, John Hunter <jd...@gm...> wrote: > On Thu, Feb 12, 2009 at 2:13 PM, Ryan May <rm...@gm...> wrote: > > On Wed, Feb 11, 2009 at 7:30 PM, John Hunter <jd...@gm...> wrote: > >> > >> On Wed, Feb 11, 2009 at 2:49 PM, Ryan May <rm...@gm...> wrote: > > > Well, I checked in an example that shows the functionality. The problem > is > > that using these events doesn't follow the standard event API. You don't > > connect using figure.canvas.mpl_connect() (it doesn't like the names > > 'xlim_changed' and 'ylim_changed'), but rather you use > > Axes.callbacks.connect(). Also, the an event object is not passed into > the > > callback, but rather the originating axes instance. Are these events > relics > > to the older version of event handling that haven't been moved to the > > present? > > > > Otherwise, should I add a special section to the event handling docs to > > handle these? > > > Thanks for the example -- you are right that this is a 'legacy' event > callback outside the regular event framework. So it doesn't really > belong in the event handling chapter but may merit a quick note there. > Alternatively, we could rather easily draft up a special event > (NavigationEvent?) that *does* work in the regular event handling > framework. The quirk is that the events are handled at the canvas > level, so it would be difficult to register for a single axes, but one > could get a NavigationEvent if the limits of any of the axes in the > figure were updated, and use the inaxes attribute to process it. If > this, or some variant of it, seems like a good idea I'm happy to add > it. > I'm +1 on your idea. While it may be a little quirky that you can't register for a single axes limit change, it's even weirder that you have different ways to register for different types of events. I think the overall API for matplotlib is improved by bringing *all* event callbacks under a single, unified, API. Along those lines, I see these other 'events' being processed in the code, but not formally recognized by the canvas level event handler: Aixs : 'units', 'units finalize' Figure : 'dpi_changed' Would it be good to try to move these to the canvas-level handler as well? I don't have a good idea myself of how that would work right now. Ryan -- Ryan May Graduate Research Assistant School of Meteorology University of Oklahoma
I'm just commenting on the points I know about below -- leaving the rest to others. Richard Jennings wrote: > > 2). Backend_svg.py._get_style(): in 0.98.3, stroke_width is a string > and in 0.98.5 it is a float. I set the styles by reading attributes in > an xml file and so the strings worked. When I upgraded, I got ‘float’ > type errors. My opinion is that we might expect parametric > polymorphism here. A stroke width could be ‘1’, 1 or 1.0 all of which > are legitimate parameters. Hence, when we set the kwarg ‘lw’ on > ‘plot’, a string, int or float should be legal. Just my opinion. > This change was made to work around a localization bug in Numpy. In a French locale (for example), printing a Numpy float scalar as a string would be "1,2" (which is against the SVG spec) and as a float would be "1.2". But you're right -- this inadvertently broke supporting strings for certain parameters. I'm actually of the opinion that supporting strings in the first place was an unintentional feature -- none of our example or regression code uses it. I'm not sold that this is something that needs to be fixed. But at a higher level, this re-raises the recurring issue about argument checking. In general, matplotlib doesn't do much type checking/coercion at the front end (user end), which leads to these sorts of unintended consequences in the backend. I would like to see more argument checking happening earlier so the user would get more localised and appropriate feedback when they passed in an invalid parameter. The idea of using Enthought's Traits library for this was thrown around in the past, but at the time it was impractical. Unfortunately, in the meantime that's kept us from doing the obvious and straightforward thing which is just to do more type and value checking in the setter methods. I think it would make a good project to go through and add type checkers to all the setters, followed by other user-points of entry, but it's not the sexiest or most interesting thing to do, perhaps. > > 3). Font_manager.createFontDict() in 0.98.3 become createFontList() in > 0.98.5. I didn’t find this change in Changes, but maybe I’m blind. > What I am saying here is that if I upgrade to 0.98.5 from 0.98.3, I > would expect 0.98.5 to be less ‘broke’ than 0.98.3, not different. > matplotlib version numbering has not traditionally followed Python's numbering scheme where the third number implies only bug fixes. We have started that sort of approach only recently with 0.98.5 where 0.98.5.x will be bugfixes only. In the future (maybe beginning 1.0 and later) we can probably have a more traditional version numbering scheme, though there has been no formal written decision on that. That change has to do with moving from exact matching (which was "broke") to nearest-neighbor font matching. It is arguable that this is a bugfix, in that certain font lookups which were broken before are now correct, even though that implies different behavior. Mike -- Michael Droettboom Science Software Branch Operations and Engineering Division Space Telescope Science Institute Operated by AURA for NASA
On Thu, Feb 12, 2009 at 2:13 PM, Ryan May <rm...@gm...> wrote: > On Wed, Feb 11, 2009 at 7:30 PM, John Hunter <jd...@gm...> wrote: >> >> On Wed, Feb 11, 2009 at 2:49 PM, Ryan May <rm...@gm...> wrote: > Well, I checked in an example that shows the functionality. The problem is > that using these events doesn't follow the standard event API. You don't > connect using figure.canvas.mpl_connect() (it doesn't like the names > 'xlim_changed' and 'ylim_changed'), but rather you use > Axes.callbacks.connect(). Also, the an event object is not passed into the > callback, but rather the originating axes instance. Are these events relics > to the older version of event handling that haven't been moved to the > present? > > Otherwise, should I add a special section to the event handling docs to > handle these? Thanks for the example -- you are right that this is a 'legacy' event callback outside the regular event framework. So it doesn't really belong in the event handling chapter but may merit a quick note there. Alternatively, we could rather easily draft up a special event (NavigationEvent?) that *does* work in the regular event handling framework. The quirk is that the events are handled at the canvas level, so it would be difficult to register for a single axes, but one could get a NavigationEvent if the limits of any of the axes in the figure were updated, and use the inaxes attribute to process it. If this, or some variant of it, seems like a good idea I'm happy to add it. JDH
Hi, I am not expert in matplotlib, I use it to generate plots for a management performance tool. I have just upgraded this application from 0.98.3 to 0.98.5 and the upgrade broke the application in 3 places: 1). In units.py, Registry.get_converter(): this method has been made recursive in 0.98.5. The problem is that if x is a string then you get a recursion error. The cause is the 'iterable() function called in the line "if converter is None and interable(x):" The interable() function is in cbook.py and it actually tests to see if the object 'x' has a __len__() method. Call iterable() on a string and it returns true. Do " for thisx in x:" and you will always get the first character in the string, which is.... a string! My solution was to change iterable(): Def iterable(obj): """ Return true if *obj* is iterable """ try: obj.__iter__() except AtributeError: return False return True this seems to have solved the problem. 2). Backend_svg.py._get_style(): in 0.98.3, stroke_width is a string and in 0.98.5 it is a float. I set the styles by reading attributes in an xml file and so the strings worked. When I upgraded, I got 'float' type errors. My opinion is that we might expect parametric polymorphism here. A stroke width could be '1', 1 or 1.0 all of which are legitimate parameters. Hence, when we set the kwarg 'lw' on 'plot', a string, int or float should be legal. Just my opinion. 3). Font_manager.createFontDict() in 0.98.3 become createFontList() in 0.98.5. I didn't find this change in Changes, but maybe I'm blind. What I am saying here is that if I upgrade to 0.98.5 from 0.98.3, I would expect 0.98.5 to be less 'broke' than 0.98.3, not different. I hope this is somehow helpful. Best regards, Richard Jennings
Kaushik Ghose <Kau...@hm...> writes: > In [2]: pylab.arange(0.5,1.0,.1) > Out[2]: array([ 0.5, 0.6, 0.7, 0.8, 0.9]) <---- OK > > In [3]: pylab.arange(0.5,1.1,.1) > Out[3]: array([ 0.5, 0.6, 0.7, 0.8, 0.9, 1. , 1.1]) <----- Not OK The "bug" is really in numpy, which is where pylab imports arange from, but even then it's not exactly a bug but a feature of floating-point numerics (.1 is not exactly representable in binary floating-point, so the equality comparison done by arange doesn't make much sense). Use linspace if you know how many values you want: In [4]: linspace(0.5,1.0,num=5,endpoint=False) Out[4]: array([ 0.5, 0.6, 0.7, 0.8, 0.9]) In [5]: linspace(0.5,1.1,num=6,endpoint=False) Out[5]: array([ 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]) -- Jouni K. Seppänen http://www.iki.fi/jks
Hi, I'm using matplotlib 0.98.5.2 on mac os X. I get the following behavior with arange that I think is not right In [1]: import pylab In [2]: pylab.arange(0.5,1.0,.1) Out[2]: array([ 0.5, 0.6, 0.7, 0.8, 0.9]) <---- OK In [3]: pylab.arange(0.5,1.1,.1) Out[3]: array([ 0.5, 0.6, 0.7, 0.8, 0.9, 1. , 1.1]) <----- Not OK Thanks -Kaushik