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
(10) |
2
(3) |
3
(5) |
4
(7) |
5
(18) |
6
(4) |
7
(15) |
8
(7) |
9
(10) |
10
(4) |
11
(18) |
12
(15) |
13
(11) |
14
(11) |
15
(4) |
16
(28) |
17
(17) |
18
(22) |
19
(12) |
20
(19) |
21
(17) |
22
(14) |
23
(4) |
24
(3) |
25
(6) |
26
(8) |
27
(13) |
28
(11) |
29
(21) |
30
(3) |
31
(5) |
|
|
|
|
|
|
From: Eric F. <ef...@ha...> - 2006-12-31 20:53:18
|
Jeff Whitaker wrote: > # reverse sign of data, so contours won't be dashed. > cs = m.contour(x, y, -topoin, [1000, 2000], colors='r') You can also use rcParams['contour.negative_linestyle'] = 'solid' to tell contour not to make monochrome negative contours dashed. Eric |
From: Jeff W. <js...@fa...> - 2006-12-31 20:41:36
|
Evan Mason wrote: > In the mpl basemap 'test.py' script, I want to add some contours to > the mercator projection map (test #3). Just below line 83 (ie, below > the 'im = imshow..' command I added the line: > > m.contour(topodat,[-1000, -2000]) > > This returns: > > /home/evan/downloads/basemap-0.9.4/examples/test.py > 82 # plot image over map. > 83 im = m.imshow(topodat,cm.jet) > ---> 84 m.contour(topodat,[-1000, -2000]) > 85 m.drawcoastlines () > 86 m.drawcountries() > > TypeError: contour() takes at least 4 arguments (3 given) > WARNING: Failure executing file: <test.py> > > I understand the error to mean that I haven't supplied x and y values; > however at this point, if I close all the open figures and enter the > line 'contour(topodat,[-1000, -2000])' at the ipython command, it > gives me the plot I want. > > I've then tried to use meshgrid to make x and y values (see code > below); this is error free but the contours don't appear. Again, > using contour in the command line I get the plot I want. Is it not > possible to plot on top of imshow? > > Any help appreciated. > > > Thanks, Evan > > > > > from matplotlib.toolkits.basemap import Basemap, shiftgrid > from scipy import interpolate as Pinterp > from pylab import * > import matplotlib.colors as colors > > def doSpline(yVec, newLatRange): > latRange = range(len(yVec)) > newLatRange = linspace(latRange[0], latRange[-1], newLatRange) > tck = Pinterp.splrep(latRange, yVec) > yVec = Pinterp.splev(newLatRange, tck) > return yVec > > topodatin = load('etopo20data.gz') > lonsin = load('etopo20lons.gz') > latsin = load('etopo20lats.gz') > # shift data so lons go from -180 to 180 instead of 20 to 380. > topoin,lons = shiftgrid(180.,topodatin,lonsin,start=False) > lats = latsin > # transform to nx x ny regularly spaced native projection grid > nx = len(lons) > ny = int(80.*len(lats)/90.) > lats_ny = doSpline(lats, ny) > > lons_mesh, lats_mesh = meshgrid(lons, lats_ny) > > # setup mercator map projection (-80 to +80). > m = Basemap(llcrnrlon=-180.,llcrnrlat=-80,urcrnrlon=180.,urcrnrlat=80.,\ > resolution='c',area_thresh=10000.,projection='merc',\ > lon_0=0.5*(lons[0]+lons[-1]),lat_ts=20.) > > topodat = m.transform_scalar(topoin,lons,lats,nx,ny) > > # setup figure with same aspect ratio as map. > fig=figure() > fig.add_axes([0.1,0.1,0.75,0.75]) > # plot image over map. > im = m.imshow(topodat,cm.jet) > # PLOT CONTOURS > m.contour(lons_mesh, lats_mesh, topodat,[-1000, -2000, -3000]) > show() > Evan: This works for me: from matplotlib.toolkits.basemap import Basemap, shiftgrid from pylab import * topodatin = load('etopo20data.gz') lonsin = load('etopo20lons.gz') latsin = load('etopo20lats.gz') # shift data so lons go from -180 to 180 instead of 20 to 380. topoin,lons = shiftgrid(180.,topodatin,lonsin,start=False) lats = latsin # setup mercator map projection (-80 to +80). m = Basemap(llcrnrlon=-180.,llcrnrlat=-80,urcrnrlon=180.,urcrnrlat=80.,\ resolution='c',area_thresh=10000.,projection='merc',\ lon_0=0.5*(lons[0]+lons[-1]),lat_ts=20.) # transform to nx x ny regularly spaced native projection grid nx = len(lons); ny = len(lats) topodat = m.transform_scalar(topoin,lons,lats,nx,ny) # setup figure with same aspect ratio as map. # plot image over map. im = m.imshow(topodat,cm.jet) # PLOT CONTOURS longrid,latgrid = meshgrid(lons,lats) x, y = m(longrid,latgrid) # reverse sign of data, so contours won't be dashed. cs = m.contour(x, y, -topoin, [1000, 2000], colors='r') m.drawcoastlines() show() Unlike the pylab contour command, the basemap contour method requires you to supply the X and Y values. -Jeff -- Jeffrey S. Whitaker Phone : (303)497-6313 NOAA/OAR/CDC R/PSD1 FAX : (303)497-6449 325 Broadway Boulder, CO, USA 80305-3328 |
From: Evan M. <eva...@gm...> - 2006-12-31 20:09:29
|
In the mpl basemap 'test.py' script, I want to add some contours to the mercator projection map (test #3). Just below line 83 (ie, below the 'im = imshow..' command I added the line: m.contour(topodat,[-1000, -2000]) This returns: /home/evan/downloads/basemap-0.9.4/examples/test.py 82 # plot image over map. 83 im = m.imshow(topodat,cm.jet) ---> 84 m.contour(topodat,[-1000, -2000]) 85 m.drawcoastlines() 86 m.drawcountries() TypeError: contour() takes at least 4 arguments (3 given) WARNING: Failure executing file: <test.py> I understand the error to mean that I haven't supplied x and y values; however at this point, if I close all the open figures and enter the line 'contour(topodat,[-1000, -2000])' at the ipython command, it gives me the plot I want. I've then tried to use meshgrid to make x and y values (see code below); this is error free but the contours don't appear. Again, using contour in the command line I get the plot I want. Is it not possible to plot on top of imshow? Any help appreciated. Thanks, Evan from matplotlib.toolkits.basemap import Basemap, shiftgrid from scipy import interpolate as Pinterp from pylab import * import matplotlib.colors as colors def doSpline(yVec, newLatRange): latRange = range(len(yVec)) newLatRange = linspace(latRange[0], latRange[-1], newLatRange) tck = Pinterp.splrep(latRange, yVec) yVec = Pinterp.splev(newLatRange, tck) return yVec topodatin = load('etopo20data.gz') lonsin = load('etopo20lons.gz') latsin = load('etopo20lats.gz') # shift data so lons go from -180 to 180 instead of 20 to 380. topoin,lons = shiftgrid(180.,topodatin,lonsin,start=False) lats = latsin # transform to nx x ny regularly spaced native projection grid nx = len(lons) ny = int(80.*len(lats)/90.) lats_ny = doSpline(lats, ny) lons_mesh, lats_mesh = meshgrid(lons, lats_ny) # setup mercator map projection (-80 to +80). m = Basemap(llcrnrlon=-180.,llcrnrlat=-80,urcrnrlon=180.,urcrnrlat=80.,\ resolution='c',area_thresh=10000.,projection='merc',\ lon_0=0.5*(lons[0]+lons[-1]),lat_ts=20.) topodat = m.transform_scalar(topoin,lons,lats,nx,ny) # setup figure with same aspect ratio as map. fig=figure() fig.add_axes([0.1,0.1,0.75,0.75]) # plot image over map. im = m.imshow(topodat,cm.jet) # PLOT CONTOURS m.contour(lons_mesh, lats_mesh, topodat,[-1000, -2000, -3000]) show() |
From: Fernando P. <fpe...@gm...> - 2006-12-31 19:38:47
|
Hi Belinda, On 12/29/06, belinda thom <bt...@cs...> wrote: > Hi, > > I'm using matplotlib w/numerix set to numpy (as described in my prior > post). > > What I am wondering is in what situations one would want to: > > import pylab > import numpy > > together, because there is matlab-style stuff (e.g. matrices, arrays, > cumprod, fft, arange etc.) by importing the pylab package alone. To add to Eric's detailed reply, keep in mind that much of this duplication is a historical accident. John Hunter developed mpl (and hence pylab) back in the Dark Days of the Split (aka, when we lived with Numeric and Numarray, both lacking critical functionality). At that time he needed various pieces of numerical functionality for his own work, so the most logical thing to do was to put it in the package he had control over: matplotlib. In fact, the same thing happened in three places: if you look at the python landscape for these tools around 2003/4, you'll find that ipython, scipy and matplotlib ALL had tools for: interactive work, plotting and numerics. Over time, as each package has matured, we've all tried to move away from this, so that hopefully the responsibilities will be: - ipython -> interactive work - numpy/scipy -> numerics - matploblib -> plotting While little code has been removed yet (to avoid breaking compatibility for existing users), at least most of what mattered has been moved to where it makes sense: numpy inherited utilities from ipython and pylab, ipython has absorbed the interactive support for matplotlib and I don't develop its plotting tools anymore (they were for gnuplot), etc. Following these ideas, in my personal use I normally do: import numpy as N import scipy as S import pylab as P and I try to use P.plottingStuff(), N.arrayStuff() and S.scipyOnlyThings(). I think this is an approach that better matches the real intent of these tools for the long term. I hope this is useful. best, f |
From: Allan N. E. <all...@gm...> - 2006-12-31 06:01:13
|
when running the embedding_in_wx4.py available in the examples.zip i always get an error dialog that a wxmsw26uh_vc.dll is missing. Pressing ok button of the error dialog makes the program run as usual. When I modified the code and added the line "from pylab import *" the program does not give the nagging error dialog. Adding that line is a fix but I want to find out why the program needs this dll and how can I alter the code so that I will not use the "from pylab import *".I use wxPython 2.7, Python 2.5 and Matplotlib 0.87.7 |
From: Eric F. <ef...@ha...> - 2006-12-30 03:04:09
|
Sourceforge does seem to be fouled up, but the following is up to date: http://www.mail-archive.com/mat...@li.../maillist.html#01707 Eric belinda thom wrote: > Hi, > > The source forge archive for this mailing list: > > http://sourceforge.net/mailarchive/forum.php? > forum_id=33405&max_rows=25&style=ultimate&viewmonth=200612 > > has no posts listed as of 12/24/06. I've posted several things today > and would like to be able to view their progress. Has this archive > moved? > > Thanks, > > --b > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users |
From: Eric F. <ef...@ha...> - 2006-12-30 02:54:14
|
Belinda, I will give a short answer, and maybe someone else will be able to provide a more complete answer or a reference to one. belinda thom wrote: > Hi, > > I'm using matplotlib w/numerix set to numpy (as described in my prior > post). > > What I am wondering is in what situations one would want to: > > import pylab > import numpy One reason for doing this would be make it clear where your numeric components are really coming from, and to take full advantage of numpy. An idiom that I often use is import pylab as P import numpy as N and then anything that ultimately comes from numpy anyway, like arange, I invoke as N.arange rather than P.arange. Or you can do it all at the top of the script with "from pylab import ..." and "from numpy import ...". > > together, because there is matlab-style stuff (e.g. matrices, arrays, > cumprod, fft, arange etc.) by importing the pylab package alone. > Pylab is a convenience package that aggregates plotting and numerical functionality in a single namespace while hiding the differences among numeric packages. This support of alternative numeric packages has been an important part of matplotlib, but its utility will diminish and it will be phased out now that numpy is ready to use. An advantage of using numpy directly now, rather than via the parts of it that pylab imports, is that you will be getting accustomed to the new numpy style rather than the compatibility mode. > On a related note, in trying to get a better idea of how math vs. > plot functionality is handled in matplotlib, I looked at mlab.py and > pylab.py; it doesn't seem there is a clear separation of these > functions, but perhaps I'm missing something? > You are correct. Pylab imports everything from matplotlib.numerix.mlab. Confusingly, there is a matplotlib.mlab and a matplotlib.numerix.mlab which uses an mlab from the selected numerical package. The numpy version of mlab, in turn, imports lots of stuff from numpy--it is another aggregator. It seems that numpy's mlab is trying to give a Matlab-like environment without the plotting, and pylab is trying to do the same thing but with the plotting included. The net results of the attempts of numpy and pylab to make things convenient by aggregating functionality in a single namespace are (1) it really can be convenient--a one-stop shop, and (2) it can be very confusing with all the possible places things can get imported from, some of them with similar names. Ipython is enormously helpful in showing where things really come from. For example in an "ipython -pylab" session, where "from pylab import *" has been done automatically by ipython, we get: In [1]:arange? Type: function Base Class: <type 'function'> String Form: <function arange at 0xb54f8ca4> Namespace: Interactive File: /usr/local/lib/python2.4/site-packages/numpy/oldnumeric/functions.py Definition: arange(start, stop=None, step=1, typecode=None, dtype=None) Docstring: <no docstring> Note that pylab is pulling in numpy's backwards-compatibility version of arange rather than its native version. Here is another example of different versions of a function with the same name, first the pylab version, then the numpy version: In [3]:linspace? Type: function Base Class: <type 'function'> String Form: <function linspace at 0xb53f59cc> Namespace: Interactive File: /usr/local/lib/python2.4/site-packages/matplotlib/mlab.py Definition: linspace(xmin, xmax, N) Docstring: <no docstring> In [4]:import numpy In [5]:numpy.linspace? Type: function Base Class: <type 'function'> String Form: <function linspace at 0xb5570df4> Namespace: Interactive File: /usr/local/lib/python2.4/site-packages/numpy/lib/function_base.py Definition: numpy.linspace(start, stop, num=50, endpoint=True, retstep=False) Docstring: Return evenly spaced numbers. Return num evenly spaced samples from start to stop. If endpoint is True, the last sample is stop. If retstep is True then return the step value used. Depending on what you are doing and on the style you prefer, you may want to use as much as possible from pylab, or you may want to use only a few things from the pylab namespace and then explicitly use the matplotlib and numpy namespaces (and object methods) for everything else. A bit of this is discussed in the matplotlib examples/pythonic_matplotlib.py. I am inclined to directly invoke numpy instead of going through pylab and numerix. That was longer than I intended for this message... but the complexity of A importing things from B and B from A via B.C, etc. is making my head spin. I hope that in the process of switching matplotlib to numpy-only we will be able to simplify all this. Eric |
From: belinda t. <bt...@cs...> - 2006-12-30 01:58:15
|
Hi, The source forge archive for this mailing list: http://sourceforge.net/mailarchive/forum.php? forum_id=33405&max_rows=25&style=ultimate&viewmonth=200612 has no posts listed as of 12/24/06. I've posted several things today and would like to be able to view their progress. Has this archive moved? Thanks, --b |
From: belinda t. <bt...@cs...> - 2006-12-29 21:06:19
|
Hi, I'm using matplotlib w/numerix set to numpy (as described in my prior post). What I am wondering is in what situations one would want to: import pylab import numpy together, because there is matlab-style stuff (e.g. matrices, arrays, cumprod, fft, arange etc.) by importing the pylab package alone. On a related note, in trying to get a better idea of how math vs. plot functionality is handled in matplotlib, I looked at mlab.py and pylab.py; it doesn't seem there is a clear separation of these functions, but perhaps I'm missing something? Thanks! --b |
From: Eric F. <ef...@ha...> - 2006-12-29 19:38:13
|
Petr Danecek wrote: > Hello, > first of all: thanks for the great software!! After the years of > struggling with gnuplot, i really enjoy making my graphs with > matplotlib. > > I'd like to ask, if it is possible to create a contour graph using polar > coordinates? If not, can someone give me some pointers about how to > implement it? John has said that he plans to improve polar coordinate handling in the next month or two. If it turns out that changes are also needed in contour.py, I will be happy to make them. So, if all goes well, within a few months we should have contouring and other things working well with polar coordinates. In the meantime, I am glad Jeff has provided a workaround. (I took a stab at making contouring work to a useful degree with present polar coordinates--given that pcolor works, it should be possible--but I couldn't quite get it. Maybe I will try again later.) Eric |
From: Eric E. <ems...@ob...> - 2006-12-29 19:35:49
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type"> </head> <body bgcolor="#ffffff" text="#000000"> sorry for all this. I guess I don't fully understand the bbox thing....<br> <br> Anyway it works great except for 2 things:<br> ** now the x,y coordinates in the toolbar are VERY SLOWLY updated... In fact as the mouse moves, the coordinates do not show up and are only updated when it is stopped.<br> ** my text does not appear fully (some part is blanked, and changing the bbox does not seem to do much)<br> <br> Eric<br> <br> John Hunter wrote: <blockquote cite="mid...@pe..." type="cite"> <blockquote type="cite"> <blockquote type="cite"> <blockquote type="cite"> <blockquote type="cite"> <blockquote type="cite"> <pre wrap="">"Eric" == Eric Emsellem <a class="moz-txt-link-rfc2396E" href="mailto:ems...@ob..."><ems...@ob...></a> writes: </pre> </blockquote> </blockquote> </blockquote> </blockquote> </blockquote> <pre wrap=""><!----> Eric> great! but one question though: I need to put the text with Eric> figtext and thus use figure coordinates (instead of pixel Eric> coord). So how would I replace the : Eric> matplotlib.transforms.lbwh_to_bbox It shouldn't matter which way you create the text instance. JDH </pre> </blockquote> <br> <pre class="moz-signature" cols="72">-- ==================================================================== Eric Emsellem <a class="moz-txt-link-abbreviated" href="mailto:ems...@ob...">ems...@ob...</a> Centre de Recherche Astrophysique de Lyon 9 av. Charles-Andre tel: +33 (0)4 78 86 83 84 69561 Saint-Genis Laval Cedex fax: +33 (0)4 78 86 83 86 France <a class="moz-txt-link-freetext" href="http://www-obs.univ-lyon1.fr/eric.emsellem">http://www-obs.univ-lyon1.fr/eric.emsellem</a> ==================================================================== </pre> </body> </html> |
From: Jeff W. <js...@fa...> - 2006-12-29 19:19:51
|
Petr Danecek wrote: > Beautiful! The grid lines must be drawn manually? > > On Thu, 2006-12-28 at 13:32 -0700, Jeff Whitaker wrote: > >> Here's a slightly prettier version of my previous example: >> >> from pylab import * >> deltatheta = 2.*pi/100. >> theta = arange(0.,2.*pi+0.5*deltatheta,deltatheta) >> R = arange(0.,pi,deltatheta) >> r,t = meshgrid(R, theta) >> Z = sin(r)*sin(3.*t) >> X = r*cos(t) >> Y = r*sin(t) >> ax = subplot(111) >> cs = ax.contourf(X,Y,Z) >> # make sure aspect ratio preserved >> ax.set_aspect('equal') >> # turn off rectangular frame. >> ax.set_frame_on(False) >> # turn off axis ticks. >> ax.set_xticks([]) >> ax.set_yticks([]) >> # draw a circle around the edge of the plot. >> rmax = max(R) >> ax.plot(rmax*cos(theta),rmax*sin(theta),'k') >> title('Polar contours') >> show() >> >> > > Petr: Here's yet another way to do it, using the basemap toolkit. This way you get axis grid lines. from matplotlib.toolkits.basemap import Basemap import pylab theta = pylab.linspace(0.,2.*pylab.pi,101) R = pylab.linspace(0.,pylab.pi,101) lat,lon = pylab.meshgrid(R, theta) Z = pylab.sin(lat)*pylab.sin(4*lon) + pylab.exp(-(lat**2/4)) # convert radial coordinate to latitude, with r=0 being north pole # and r=rmax being equator. # convert r and theta to degrees. lat = (180./pylab.pi)*0.5*lat[::-1,:] lon = (180./pylab.pi)*lon m = Basemap(boundinglat=0.,lon_0=0.,resolution=None,projection='npaeqd') X,Y = m(lon,lat) CS = m.contourf(X,Y,Z,15) m.drawparallels(pylab.arange(0,90,20),labels=[1,1,1,1]) m.drawmeridians(pylab.arange(0,360,60),labels=[1,1,1,1]) pylab.show() -Jeff -- Jeffrey S. Whitaker Phone : (303)497-6313 NOAA/OAR/CDC R/PSD1 FAX : (303)497-6449 325 Broadway Boulder, CO, USA 80305-3328 |
From: belinda t. <bt...@cs...> - 2006-12-29 18:54:07
|
Hi, I'm unable to use matplotlib when I have the following line in my matlabplotrc file: numerix Numeric. There is no problem when I use: numerix numpy Here's my setup: Mac G5 w/OS X 10.4.8, using MacPython 2.4, numpy.__version__ is 1.0, matplotlib.__version__ 0.87.7 and Numeric.__version__ 24.2 I append below the errors I get when trying to use numerix Numeric via python and ipython. Is this a bug? --b VIA IPYTHON: ==================== 6 % ipython -pylab Python 2.4.4 (#1, Oct 18 2006, 10:34:39) Type "copyright", "credits" or "license" for more information. IPython 0.7.2 -- An enhanced Interactive Python. ? -> Introduction to IPython's features. %magic -> Information about IPython's 'magic' % functions. help -> Python's own help system. object? -> Details about 'object'. ?object also works, ?? prints more. Welcome to pylab, a matplotlib-based Python environment. For more information, type 'help(pylab)'. In [1]: plot([1,2,3]) ------------------------------------------------------------------------ --- exceptions.TypeError Traceback (most recent call last) /Users/bthom/belinda/mills/aicourse/tic-tac-toe/<ipython console> /Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site- packages/matplotlib/pylab.py in plot(*args, **kwargs) 2025 hold(h) 2026 try: -> 2027 ret = gca().plot(*args, **kwargs) 2028 draw_if_interactive() 2029 except: /Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site- packages/matplotlib/axes.py in plot(self, *args, **kwargs) 2129 lines = [line for line in lines] # consume the generator 2130 -> 2131 self.autoscale_view(scalex=scalex, scaley=scaley) 2132 return lines 2133 /Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site- packages/matplotlib/axes.py in autoscale_view(self, tight, scalex, scaley) 983 if xl[1] < xl[0]: 984 XL = XL[::-1] --> 985 self.set_xlim(XL) 986 if scaley: 987 yl = self.get_ylim() /Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site- packages/matplotlib/axes.py in set_xlim(self, xmin, xmax, emit) 1225 xmax += 1e-38 1226 -> 1227 self.viewLim.intervalx().set_bounds(xmin, xmax) 1228 if emit: self._send_xlim_event() 1229 return xmin, xmax TypeError: only length-1 arrays can be converted to Python scalars. .pdbrc.py started .pdbrc.py finished > /Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/ site-packages/matplotlib/axes.py(1227)set_xlim() 1226 -> 1227 self.viewLim.intervalx().set_bounds(xmin, xmax) 1228 if emit: self._send_xlim_event() VIA PYTHON: ================= 3 % python Python 2.4.4 (#1, Oct 18 2006, 10:34:39) [GCC 4.0.1 (Apple Computer, Inc. build 5341)] on darwin Type "help", "copyright", "credits" or "license" for more information. history mechanism set up >>> import pylab >>> pylab.plot([1,2,3]) Traceback (most recent call last): File "<stdin>", line 1, in ? File "/Library/Frameworks/Python.framework/Versions/2.4/lib/ python2.4/site-packages/matplotlib/pylab.py", line 2027, in plot ret = gca().plot(*args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/2.4/lib/ python2.4/site-packages/matplotlib/axes.py", line 2131, in plot self.autoscale_view(scalex=scalex, scaley=scaley) File "/Library/Frameworks/Python.framework/Versions/2.4/lib/ python2.4/site-packages/matplotlib/axes.py", line 985, in autoscale_view self.set_xlim(XL) File "/Library/Frameworks/Python.framework/Versions/2.4/lib/ python2.4/site-packages/matplotlib/axes.py", line 1227, in set_xlim self.viewLim.intervalx().set_bounds(xmin, xmax) TypeError: only length-1 arrays can be converted to Python scalars. |
From: John H. <jdh...@ac...> - 2006-12-29 18:53:55
|
>>>>> "Eric" == Eric Emsellem <ems...@ob...> writes: Eric> great! but one question though: I need to put the text with Eric> figtext and thus use figure coordinates (instead of pixel Eric> coord). So how would I replace the : Eric> matplotlib.transforms.lbwh_to_bbox It shouldn't matter which way you create the text instance. JDH |
From: Eric E. <ems...@ob...> - 2006-12-29 18:50:35
|
great! but one question though: I need to put the text with figtext and thus use figure coordinates (instead of pixel coord). So how would I replace the : matplotlib.transforms.lbwh_to_bbox ? thanks Eric John Hunter wrote > def ondraw(event): > l,b,w,h = t.get_window_extent(event.renderer).get_bounds() > > figw, figh = fig.figwidth.get(), fig.figheight.get() > # expand the rectangle to account for larger text; coords are pixel space > ondraw.bbox = matplotlib.transforms.lbwh_to_bbox( > l-10, b-10, w+200, h+20) > ondraw.background = fig.canvas.copy_from_bbox(ondraw.bbox) > ondraw.background = None > ondraw.bbox = None > |
From: Christopher B. <Chr...@no...> - 2006-12-29 18:26:48
|
Achim Gaedke wrote: > For a print button in matplotlib it is necessary to find implementations > for other widget sets: > * tk > * wx > * qt wx has pretty good print support. However, with the wx back-end, you'd need to decide if you want to send the bitmap Agg created to the printer, or revert to using wx Drawing calls. And someone still has to write the code --- -Chris -- Christopher Barker, Ph.D. Oceanographer Emergency Response Division NOAA/NOS/OR&R (206) 526-6959 voice 7600 Sand Point Way NE (206) 526-6329 fax Seattle, WA 98115 (206) 526-6317 main reception Chr...@no... |
From: John H. <jdh...@ac...> - 2006-12-29 18:03:36
|
>>>>> "Eric" == Eric Emsellem <ems...@ob...> writes: Eric> Hi, thanks for this useful and quick answer. I am (always) Eric> using GTKAgg (hope it is a good choice). I understand the 40 Eric> Mb part then, but not the 150-200 Mb... (this happens when I Eric> move the cursor within the figure window only and things get Eric> worse when I reload the data with a new imshow). Eric> Two things from what you say: Eric> * first : should I do something before redoing another Eric> imshow? (when I cycle many times through the 3 commands, Eric> connect, disconnect, imshow, the mouse event updating gets Eric> really slow, and in fact it seems only the "imshow" really Eric> makes things worse..). Maybe I need to "flush" the old Eric> data/image/imshow ? If you are doing multiple imshows and not clearing the axes in between then you may be overplotting multiple images. Make sure you clear your axes before plotting a new image ax.cla() Eric> * second: I tried to understand what you mentioned in your Eric> email about the blit thing. I understand the "principle", Eric> reading the wiki, and going into mpl examples, but I didn"t Eric> manage to implement it in practice (see my pathetic attempt Eric> below). I guess the main reason is that I am not sure what Eric> should be the "background" in the case of a figtext... (not Eric> ax.bbox I guess but then what?) You would want to pick a rectangle large enough to hold any text you may want to plot to an area, and the copy and blit just that region. Here are two examples: the first redraws the entire figure as you are doing but reports memory. I find that memory grows for a while but them stabilizes, and if you throw in a gc.collect() it is rock solid. Uncomment gc.collect to compare The second script uses the blitting technique -- you'll appreciate the performance boost! ### script one, draw the whole thing every time import os, sys, time, gc import matplotlib #matplotlib.interactive(True) #matplotlib.use('Cairo') matplotlib.use('GTKAgg') import matplotlib.transforms from pylab import figure, show, nx 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()[1]) fig = figure() ax = fig.add_subplot(111) X = nx.mlab.randn(100,100) ax.imshow(X) t = ax.text(20,20,'test: 0') def onmove(event): mem = report_memory(onmove.cnt) t.set_text('test: %d mem=%d'%(onmove.cnt, mem)) fig.canvas.draw_idle() onmove.cnt +=1 #gc.collect() onmove.cnt = 0 fig.canvas.mpl_connect('motion_notify_event', onmove) show() ### script two, just blit the text region import os, sys, time import matplotlib #matplotlib.interactive(True) #matplotlib.use('Cairo') matplotlib.use('GTKAgg') import matplotlib.transforms from pylab import figure, show, nx 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()[1]) fig = figure() ax = fig.add_subplot(111) X = nx.mlab.randn(100,100) ax.imshow(X) t = ax.text(20,20,'test: 0', animated=True) def ondraw(event): l,b,w,h = t.get_window_extent(event.renderer).get_bounds() figw, figh = fig.figwidth.get(), fig.figheight.get() # expand the rectangle to account for larger text; coords are pixel space ondraw.bbox = matplotlib.transforms.lbwh_to_bbox( l-10, b-10, w+200, h+20) ondraw.background = fig.canvas.copy_from_bbox(ondraw.bbox) ondraw.background = None ondraw.bbox = None def onmove(event): mem = report_memory(onmove.cnt) t.set_text('test: %d mem=%d'%(onmove.cnt, mem)) if ondraw.background is not None: fig.canvas.restore_region(ondraw.background) ax.draw_artist(t) fig.canvas.blit(ondraw.bbox) onmove.cnt +=1 onmove.cnt = 0 fig.canvas.mpl_connect('motion_notify_event', onmove) fig.canvas.mpl_connect('draw_event', ondraw) show() JDH |
From: Jeff W. <js...@fa...> - 2006-12-29 17:10:28
|
Petr Danecek wrote: > Beautiful! The grid lines must be drawn manually? > > On Thu, 2006-12-28 at 13:32 -0700, Jeff Whitaker wrote: > >> Here's a slightly prettier version of my previous example: >> >> from pylab import * >> deltatheta = 2.*pi/100. >> theta = arange(0.,2.*pi+0.5*deltatheta,deltatheta) >> R = arange(0.,pi,deltatheta) >> r,t = meshgrid(R, theta) >> Z = sin(r)*sin(3.*t) >> X = r*cos(t) >> Y = r*sin(t) >> ax = subplot(111) >> cs = ax.contourf(X,Y,Z) >> # make sure aspect ratio preserved >> ax.set_aspect('equal') >> # turn off rectangular frame. >> ax.set_frame_on(False) >> # turn off axis ticks. >> ax.set_xticks([]) >> ax.set_yticks([]) >> # draw a circle around the edge of the plot. >> rmax = max(R) >> ax.plot(rmax*cos(theta),rmax*sin(theta),'k') >> title('Polar contours') >> show() >> >> Petr: Another option might be to use pcolor, it does work wit polar axes. import pylab # make color-filled plot of polar coordinate data array. # define coordinates. theta = pylab.linspace(0.,2.*pylab.pi,101) R = pylab.linspace(0.,pylab.pi,101) Y,X = pylab.meshgrid(R, theta) # data to plot. Z = pylab.sin(Y)*pylab.sin(4*X) + pylab.exp(-(Y**2/4)) # create subplot. ax = pylab.subplot(111,polar=True) # mesh fill. ax.pcolormesh(X,Y,Z) # make sure aspect ratio preserved ax.set_aspect('equal') pylab.show() -Jeff -- Jeffrey S. Whitaker Phone : (303)497-6313 NOAA/OAR/CDC R/PSD1 FAX : (303)497-6449 325 Broadway Boulder, CO, USA 80305-3328 |
From: Eric E. <ems...@ob...> - 2006-12-29 16:13:20
|
Hi again, thinking about the module I am writing which will include a "move mouse event" to get the intensity of the pixel in an imshow provided in the figure I am wondering: - would it make any sense to DIRECTLY include such a facility (intensity of pixel provided for an imshow, figimage...) NEXT to the coordinates x & Y which are already there (in the lower right) in mpl figures ???? To me (at least) it would make a LOT of sense, since x,y are already provided for any plot, or imshow-like commands. The third axis (intensity) would then only appear when there is a third dimension is available of course (imshow, etc). I can imagine that such a facility could be turned on or off (I guess...). no? Eric |
From: Eric E. <ems...@ob...> - 2006-12-29 16:01:52
|
Hi, thanks for this useful and quick answer. I am (always) using GTKAgg (hope it is a good choice). I understand the 40 Mb part then, but not the 150-200 Mb... (this happens when I move the cursor within the figure window only and things get worse when I reload the data with a new imshow). Two things from what you say: * first : should I do something before redoing another imshow? (when I cycle many times through the 3 commands, connect, disconnect, imshow, the mouse event updating gets really slow, and in fact it seems only the "imshow" really makes things worse..). Maybe I need to "flush" the old data/image/imshow ? * second: I tried to understand what you mentioned in your email about the blit thing. I understand the "principle", reading the wiki, and going into mpl examples, but I didn"t manage to implement it in practice (see my pathetic attempt below). I guess the main reason is that I am not sure what should be the "background" in the case of a figtext... (not ax.bbox I guess but then what?) Any help is welcome (or a hint, since doing it myself is I guess the best way to learn ...) thanks again Eric #=================================================== # This script is not working... something I didn't understand in blitting.... #=================================================== import numpy as num import matplotlib as mpl import matplotlib.pylab as plab data = num.random.rand(200,200) xy = [num.arange(0.,20,.1), num.arange(0.,20,.1)] fig = plab.figure() canvas = fig.canvas im = plab.imshow(data, extent=[0.,20.,0.,20.]) ftext = plab.figtext(0.9,0.9,"", animated=True) ax = plab.gca() background = canvas.copy_from_bbox(ax.bbox) def whichpix_inframe(coord) : indw = num.zeros(2, num.int32) if len(coord) == 2 : indw[0] = num.sort(xy[0]).searchsorted(coord[0]) indw[1] = num.sort(xy[1]).searchsorted(coord[1]) return indw def mouse_move(event) : if event.inaxes : canvas.restore_region(background) ftext.set_text(str(data[tuple(whichpix_inframe([event.xdata, event.ydata]))])) ax.draw_artist(ftext) canvas.blit(ax.bbox) # canvas.draw() id = canvas.mpl_connect('motion_notify_event', mouse_move) canvas.mpl_disconnect(id) John Hunter wrote: > Eric> 2/ When I now use the mouse_move event, it can go up to 150 > Eric> Mb of memory usage!! Again: is that normal? > > In your example code below, I notice you are drawing on every mouse > motion. I believe there is a Tkinter specific leak in TkAgg if memory > serves, but it's outside of mpl. What backend are you using? Does > the problem go away with a different backend? ... > The basic idea is to capture the background as a pixel buffer, > identify the rectangle region you want to draw the text into, draw the > background, update the text, redraw only the text rectangle etc.... > See > > http://www.scipy.org/Cookbook/Matplotlib/Animation |
From: Jeff W. <js...@fa...> - 2006-12-29 16:00:02
|
Petr Danecek wrote: > Beautiful! The grid lines must be drawn manually? > > On Thu, 2006-12-28 at 13:32 -0700, Jeff Whitaker wrote: > >> Here's a slightly prettier version of my previous example: >> >> from pylab import * >> deltatheta = 2.*pi/100. >> theta = arange(0.,2.*pi+0.5*deltatheta,deltatheta) >> R = arange(0.,pi,deltatheta) >> r,t = meshgrid(R, theta) >> Z = sin(r)*sin(3.*t) >> X = r*cos(t) >> Y = r*sin(t) >> ax = subplot(111) >> cs = ax.contourf(X,Y,Z) >> # make sure aspect ratio preserved >> ax.set_aspect('equal') >> # turn off rectangular frame. >> ax.set_frame_on(False) >> # turn off axis ticks. >> ax.set_xticks([]) >> ax.set_yticks([]) >> # draw a circle around the edge of the plot. >> rmax = max(R) >> ax.plot(rmax*cos(theta),rmax*sin(theta),'k') >> title('Polar contours') >> show() >> >> > > Petr: Yes. matplotlib has polar axes for some kinds of plots, but not for contour plots. -Jeff -- Jeffrey S. Whitaker Phone : (303)497-6313 NOAA/OAR/CDC R/PSD1 FAX : (303)497-6449 325 Broadway Boulder, CO, USA 80305-3328 |
From: Petr D. <da...@uc...> - 2006-12-29 15:47:22
|
Beautiful! The grid lines must be drawn manually? On Thu, 2006-12-28 at 13:32 -0700, Jeff Whitaker wrote: > Here's a slightly prettier version of my previous example: > > from pylab import * > deltatheta = 2.*pi/100. > theta = arange(0.,2.*pi+0.5*deltatheta,deltatheta) > R = arange(0.,pi,deltatheta) > r,t = meshgrid(R, theta) > Z = sin(r)*sin(3.*t) > X = r*cos(t) > Y = r*sin(t) > ax = subplot(111) > cs = ax.contourf(X,Y,Z) > # make sure aspect ratio preserved > ax.set_aspect('equal') > # turn off rectangular frame. > ax.set_frame_on(False) > # turn off axis ticks. > ax.set_xticks([]) > ax.set_yticks([]) > # draw a circle around the edge of the plot. > rmax = max(R) > ax.plot(rmax*cos(theta),rmax*sin(theta),'k') > title('Polar contours') > show() > |
From: John H. <jdh...@ac...> - 2006-12-29 14:44:31
|
>>>>> "Eric" == Eric Emsellem <ems...@ob...> writes: Eric> Questions and problems: 1/ when I load the image the first Eric> time (first imshow command in the script), I see that, Eric> although the amount of data is very small, Eric> ipython/matplotlib already uses more than 40 Mb of memory! Eric> Is that normal? It seems high, but looks inline with the size of the mpl extension code (though some of which is redunant numpy/numeric/numarray extensions that shouldn't all be loaded) peds-pc311:~/mpl/build> du -h 20M ./lib.linux-i686-2.4/matplotlib/backends 8.0K ./lib.linux-i686-2.4/matplotlib/toolkits 8.0K ./lib.linux-i686-2.4/matplotlib/numerix/mlab 8.0K ./lib.linux-i686-2.4/matplotlib/numerix/ma 8.0K ./lib.linux-i686-2.4/matplotlib/numerix/linear_algebra 8.0K ./lib.linux-i686-2.4/matplotlib/numerix/random_array 8.0K ./lib.linux-i686-2.4/matplotlib/numerix/fft 64K ./lib.linux-i686-2.4/matplotlib/numerix 40K ./lib.linux-i686-2.4/matplotlib/enthought/traits/ui/null 252K ./lib.linux-i686-2.4/matplotlib/enthought/traits/ui 632K ./lib.linux-i686-2.4/matplotlib/enthought/traits 28K ./lib.linux-i686-2.4/matplotlib/enthought/resource 12K ./lib.linux-i686-2.4/matplotlib/enthought/util 676K ./lib.linux-i686-2.4/matplotlib/enthought 40M ./lib.linux-i686-2.4/matplotlib 40M ./lib.linux-i686-2.4 40M Eric> 2/ When I now use the mouse_move event, it can go up to 150 Eric> Mb of memory usage!! Again: is that normal? In your example code below, I notice you are drawing on every mouse motion. I believe there is a Tkinter specific leak in TkAgg if memory serves, but it's outside of mpl. What backend are you using? Does the problem go away with a different backend? If there is a leak under our control we will certainly find it an fix it to the best of our abilities. Our canonical memory leak checking script (which does an imshow and more) is running rock solid on the Agg backend so if there is a leak it is probably backend specific. I noticed in your example script that you are only modifiying a text entry on mouse motion. Your performance will dramatically improve if you use the blitting techniques described in the animation tutorial. The basic idea is to capture the background as a pixel buffer, identify the rectangle region you want to draw the text into, draw the background, update the text, redraw only the text rectangle etc.... See http://www.scipy.org/Cookbook/Matplotlib/Animations After you've read through this if you get stuck let me know and I'll put together a small demo for you. JDH |
From: Eric E. <ems...@ob...> - 2006-12-29 13:31:50
|
Hi, I am writing a small module to easily load images and interact with them. I now face a memory usage +CPU problem, which may in fact be the result of a normal behaviour of matplotlib (but more certainly something I am not doing right), but I really like to be sure here because if confirmed, it would mean that this module is almost not usable for large images... Below is a (very simplified) example of what I am doing, that script showing a similar behaviour than the real full module. Questions and problems: 1/ when I load the image the first time (first imshow command in the script), I see that, although the amount of data is very small, ipython/matplotlib already uses more than 40 Mb of memory! Is that normal? 2/ When I now use the mouse_move event, it can go up to 150 Mb of memory usage!! Again: is that normal? 3/ When I do successive cycles of connect, disconnect, imshow (reloading the figure), the memory usage seems to grow slightly, but more importantly the capturing event (writing the data intensity on the top right corner of the figure) gets REALLY SLOW.. Try a series of 10 imshow with the same data.. So maybe I should "clean" some structure somewhere to allow a fast interaction, or maybe the code below is rubish. But so far I haven't found a cure, and this is very annoying to say the least. Thanks for any tip on this problem. Eric P.S.: and for the sake of tempering the questions above (certainly caused by my ignorance): matplotlib + numpy is just an amazing combination!!! P.P.S: set up for me is: Suse 10.1 matplotlib version 0.87.7 numerix numpy 1.0.2.dev3491 Python 2.4.2 (#1, May 2 2006, 08:13:46) IPython 0.7.4.svn.r2010 -- An enhanced Interactive Python. ## =============================== ## Below is a small script to illustrate memory and CPU pbs ## It loads some rand data, with coordinates given in xy ## and the mouse event allows to write the intensity of ## the image in the top right corner of the figure ## =============================== import numpy as num import matplotlib as mpl import matplotlib.pylab as plab data = num.random.rand(200,200) xy = [num.arange(0.,20,.1), num.arange(0.,20,.1)] fig = plab.figure() canvas = fig.canvas plab.imshow(data, extent=[0.,20.,0.,20.]) ftext = plab.figtext(0.9,0.9,"") def whichpix_inframe(coord) : indw = num.zeros(2, num.int32) if len(coord) == 2 : indw[0] = num.sort(xy[0]).searchsorted(coord[0]) indw[1] = num.sort(xy[1]).searchsorted(coord[1]) return indw def mouse_move(event) : if event.inaxes : ax = event.inaxes ftext.set_text(str(data[tuple(whichpix_inframe([event.xdata, event.ydata]))])) canvas.draw() id = canvas.mpl_connect('motion_notify_event', mouse_move) ## then we can go on and cycle through the next 3 lines...: it shows the CPU+memory pb getting worse # canvas.mpl_disconnect(id) # plab.imshow(data, extent=[0.,20.,0.,20.]) # id = canvas.mpl_connect('motion_notify_event', mouse_move) |
From: Eric F. <ef...@ha...> - 2006-12-29 08:14:42
|
John Hunter wrote: >>>>>> "Eric" == Eric Firing <ef...@ha...> writes: > Eric> either, indistinguishably from the way it does now. The > Eric> problem is that with a linear axis we want the axis to start > Eric> at zero by default, but with a log axis we want it to start > > With ymin at 1e-100, the default (linear) locator should choose 0 as > ymin. If it doesn't it looks like a bug. Is either the log or linear > autoscaler broken for bottom=something-really-small ? > > JDH The problem is not the linear case but the log, and it is not a problem with the locators or with the autoscaling methods. Rather, for the log scale we want the autoscaling to ignore the bottom of the patches at 1e-100 and instead pick a lower value for plotting based on the tops of the patches (or the bottom of the errorbars, if present). This is what I have it doing now via the somewhat clumsy method of adjusting the dataLim after the patches have been added. To make the transition to a log scale work correctly after bar has been called with a linear scale, some such adjustment would have to be made. This is the sort of thing that could be done by registering a callback, but we don't have the machinery in place. Maybe this is a place where traits would help? I've never used them, but I seem to recall seeing that they include callback functionality. Eric |