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
(12) |
2
(13) |
3
(14) |
4
(9) |
|
5
(9) |
6
(22) |
7
(17) |
8
(16) |
9
(19) |
10
(17) |
11
(6) |
|
12
|
13
(20) |
14
(21) |
15
(20) |
16
(10) |
17
(14) |
18
(3) |
|
19
(3) |
20
(12) |
21
(22) |
22
(26) |
23
(31) |
24
(26) |
25
(9) |
|
26
(4) |
27
(33) |
28
(15) |
29
(37) |
30
(26) |
|
|
|
From: John S. <pra...@ho...> - 2009-04-22 23:38:57
|
------------------------------------------------------------------------------ Stay on top of everything new and different, both inside and around Java (TM) technology - register by April 22, and save $200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco. 300 plus technical and hands-on sessions. Register today. Use priority code J9JMT32. http://p.sf.net/sfu/p |
|
From: Jesper L. <jes...@gm...> - 2009-04-22 20:24:39
|
I forgot to mention that it seems like the issue is related to the Figure object (and not any foreign language extensions?). When a fig.clf() is added before the call to report_memory the memory usage is constant. Since I am reusing the Figure instance this is a problem for me. But maybe I just need to figure out what to delete from the Figure instance - or should it be unchanged for the case I presented? Best regards, Jesper 2009/4/15 Michael Droettboom <md...@st...>: > I am not able to reproduce this leak here with 0.98.6svn from today on > RHEL4. What platform are you on? > > (See attached massif profile -- the memory usage is flat...) > > Mike > > Jesper Larsen wrote: >> >> Hi matplotlib developers and users, >> >> I have had some problems with a memory leak in a long running >> matplotlib based web application that I have developed >> (www.worldwildweather.com). I believe the problem is due to a memory >> leak in the Agg backend but I am not sure. Below is a script which for >> me results in a consistently increasing amount of memory usage. I am >> using mpl version 0.98.6svn. The problem does not occur when the >> savefig command is commented out. And it does not occur when "cs = >> ax.contourf(z)" and "ax.cla()" are moved outside the loop (before and >> after respectively). >> >> Best regards, >> Jesper >> >> import os, gc >> import numpy as npy >> import matplotlib as mpl >> from matplotlib.figure import Figure >> from matplotlib.backends.backend_agg import FigureCanvasAgg as >> FigureCanvas >> >> def report_memory(): >> """Report memory.""" >> gc.collect() >> pid = os.getpid() >> a2 = os.popen('ps -p %d -o rss,vsz,%%mem' % pid).readlines() >> return int(a2[1].split()[1]) >> >> fig = Figure(dpi=100) >> ax = fig.add_axes([0.1, 0.1, 0.8, 0.8]) >> FigureCanvas(fig) >> >> n = 1000 >> z = npy.zeros((n,n)) >> for i in range(2000): >> cs = ax.contourf(z) >> fig.savefig('test.png') >> ax.cla() >> print report_memory(), i >> >> I have not pasted in all of the output but just the first and last 25 >> lines: >> 53356 0 >> 53360 1 >> 53360 2 >> 53360 3 >> 53360 4 >> 53360 5 >> 53360 6 >> 53360 7 >> 53360 8 >> 53360 9 >> 53360 10 >> 53360 11 >> 53360 12 >> 53360 13 >> 53360 14 >> 53360 15 >> 53360 16 >> 53360 17 >> 53356 18 >> 53360 19 >> 53360 20 >> 53360 21 >> 53360 22 >> 53360 23 >> 53356 24 >> ... >> 57552 1975 >> 57552 1976 >> 57552 1977 >> 57552 1978 >> 57552 1979 >> 57552 1980 >> 57552 1981 >> 57552 1982 >> 57552 1983 >> 57552 1984 >> 57552 1985 >> 57552 1986 >> 57552 1987 >> 57552 1988 >> 57552 1989 >> 57552 1990 >> 57552 1991 >> 57552 1992 >> 57552 1993 >> 57552 1994 >> 57552 1995 >> 57552 1996 >> 57552 1997 >> 57552 1998 >> 57552 1999 >> >> >> ------------------------------------------------------------------------------ >> This SF.net email is sponsored by: >> High Quality Requirements in a Collaborative Environment. >> Download a free trial of Rational Requirements Composer Now! >> http://p.sf.net/sfu/www-ibm-com >> _______________________________________________ >> 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 > > |
|
From: Jesper L. <jes...@gm...> - 2009-04-22 19:46:31
|
Hi Michael and others, Sorry for the late answer. I am on Ubuntu 8.10. Unfortunately I have not had time to look any more into the issue (which might very well be an error on my part) but I will return when I have more info (I have made a temporary fix). I tried using valgrind-massif to reproduce your plot but unfortunately newer versions of valgrind-massif do not support ps plots. Best regards, Jesper 2009/4/15 Michael Droettboom <md...@st...>: > I am not able to reproduce this leak here with 0.98.6svn from today on > RHEL4. What platform are you on? > > (See attached massif profile -- the memory usage is flat...) > > Mike > > Jesper Larsen wrote: >> >> Hi matplotlib developers and users, >> >> I have had some problems with a memory leak in a long running >> matplotlib based web application that I have developed >> (www.worldwildweather.com). I believe the problem is due to a memory >> leak in the Agg backend but I am not sure. Below is a script which for >> me results in a consistently increasing amount of memory usage. I am >> using mpl version 0.98.6svn. The problem does not occur when the >> savefig command is commented out. And it does not occur when "cs = >> ax.contourf(z)" and "ax.cla()" are moved outside the loop (before and >> after respectively). >> >> Best regards, >> Jesper >> >> import os, gc >> import numpy as npy >> import matplotlib as mpl >> from matplotlib.figure import Figure >> from matplotlib.backends.backend_agg import FigureCanvasAgg as >> FigureCanvas >> >> def report_memory(): >> """Report memory.""" >> gc.collect() >> pid = os.getpid() >> a2 = os.popen('ps -p %d -o rss,vsz,%%mem' % pid).readlines() >> return int(a2[1].split()[1]) >> >> fig = Figure(dpi=100) >> ax = fig.add_axes([0.1, 0.1, 0.8, 0.8]) >> FigureCanvas(fig) >> >> n = 1000 >> z = npy.zeros((n,n)) >> for i in range(2000): >> cs = ax.contourf(z) >> fig.savefig('test.png') >> ax.cla() >> print report_memory(), i >> >> I have not pasted in all of the output but just the first and last 25 >> lines: >> 53356 0 >> 53360 1 >> 53360 2 >> 53360 3 >> 53360 4 >> 53360 5 >> 53360 6 >> 53360 7 >> 53360 8 >> 53360 9 >> 53360 10 >> 53360 11 >> 53360 12 >> 53360 13 >> 53360 14 >> 53360 15 >> 53360 16 >> 53360 17 >> 53356 18 >> 53360 19 >> 53360 20 >> 53360 21 >> 53360 22 >> 53360 23 >> 53356 24 >> ... >> 57552 1975 >> 57552 1976 >> 57552 1977 >> 57552 1978 >> 57552 1979 >> 57552 1980 >> 57552 1981 >> 57552 1982 >> 57552 1983 >> 57552 1984 >> 57552 1985 >> 57552 1986 >> 57552 1987 >> 57552 1988 >> 57552 1989 >> 57552 1990 >> 57552 1991 >> 57552 1992 >> 57552 1993 >> 57552 1994 >> 57552 1995 >> 57552 1996 >> 57552 1997 >> 57552 1998 >> 57552 1999 >> >> >> ------------------------------------------------------------------------------ >> This SF.net email is sponsored by: >> High Quality Requirements in a Collaborative Environment. >> Download a free trial of Rational Requirements Composer Now! >> http://p.sf.net/sfu/www-ibm-com >> _______________________________________________ >> 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 > > |
|
From: Michael D. <md...@st...> - 2009-04-22 18:33:35
|
At this point, the expected dependencies are on freetype for font rendering and Numpy and/or PIL for imaging. Nothing platform-specific. There aren't any plans to make it usable from other languages, but certainly a commandline interface would be trivial. Mike Kasper Peeters wrote: > Hi all, > > I noticed that a Google Summer of Code project has been allocated for > extraction of the TeX rendering engine of matplotlib. Excellent! > > Are there already any more concrete ideas on how this will be realised > technically, in particular how this engine will be callable from > Python programs? Will it be bound to e.g. PyGtk or some other > low-level graphics library? And is there perhaps a plan to make this > usable also from other languages? (I am thinking concretely about C++ > for my own needs, but can very well imagine that this would be > extremely useful also in other languages; something like a 'glib for > TeX, plus language wrappers' would be ideal). > > Best, > Kasper > > ------------------------------------------------------------------------------ > Stay on top of everything new and different, both inside and > around Java (TM) technology - register by April 22, and save > $200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco. > 300 plus technical and hands-on sessions. Register today. > Use priority code J9JMT32. http://p.sf.net/sfu/p > _______________________________________________ > 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 |
|
From: John H. <jd...@gm...> - 2009-04-22 17:51:10
|
On Wed, Apr 22, 2009 at 10:30 AM, Esmail <eb...@ho...> wrote: > Hello all, > > Does anyone know of a quick reference for the various plotting > functions for pylab? I'm just getting started with this > after years of work with gnuplot. > > I found this > > http://matplotlib.sourceforge.net/api/pyplot_api.html There is no quick reference, though one would be handy. If you scroll down to the bottom of the main page at http://matplotlib.sourceforge.net/index.html there is a summary of the pyplot plotting commands with links to the full docs. You can at least see most everything that is available in pyplot in one place. JDH |
|
From: Gökhan S. <gok...@gm...> - 2009-04-22 17:44:19
|
Still same with IPython 0.9.1 I will test on Win XP when I get a chance. Gökhan On Wed, Apr 22, 2009 at 8:54 AM, Gökhan SEVER <gok...@gm...> wrote: > Huh, > > My definition of kill is just like you said. > > Inside Ipython print statements output x_new, and y_new values, but no > context saving :( > > Worse thing is python rect.py does not nothing, not even with -d switch :( > :( > > I will try with Ipython 0.9.1. > > Gökhan > > > > On Wed, Apr 22, 2009 at 4:40 AM, Matthias Michler <Mat...@gm... > > wrote: > >> Hi Gökhan, >> Hi list, >> >> On Tuesday 21 April 2009 19:44:18 Gökhan SEVER wrote: >> > Hi Matthias, >> > >> > Thanks for your reply again. Unfortunately I can't read x_new or y_new >> > after I kill the figures (nor when they are active). I don't know what >> > exactly wrong in my configuration or IPython. I use IPython >> 0.10.bzr.r1163 >> > on Fedora 10. >> With "kill" you mean just closing the figures with button "X", isn't it? >> >> What about adding the line >> print x_new, y_new >> after the show() in your rect.py-script? Does this give some output in >> ipython >> or if you run the script using "python rect.py" ? >> >> best regards >> Matthias >> >> > Hopefully, I will solve the masked array riddle by reading more >> (although >> > haven't seen a specific example similar to my question on the numpy >> > reference pages), if not getting some insight from a numpy expert or >> like >> > you said from an expert on masked arrays :) >> > >> > Have a good Tuesday to all. >> > >> > Gökhan >> > >> > >> > On Tue, Apr 21, 2009 at 3:21 AM, Matthias Michler >> > >> > <Mat...@gm...>wrote: >> > > Hi Gökhan, >> > > Hi list, >> > > Hi experts on masked arrays, >> > > >> > > I run the attached script (copied from your last two emails) and I can >> > > use x_new, y_new after closing the figures (where x_new and y_new are >> the >> > > values >> > > selected in the last selection). >> > > >> > > I don't know, what is going wrong with your script on your system. >> > > >> > > ### my output ########################## >> > > In [1]: run rect.py >> > > startposition : (0.276210, 0.592969) >> > > endposition : (0.542339, 0.309375) >> > > used button : 1 >> > > startposition : (0.745968, 0.747656) >> > > endposition : (0.745968, 0.747656) >> > > used button : 1 >> > > startposition : (0.645161, 0.761719) >> > > endposition : (0.806452, 0.609375) >> > > used button : 3 >> > > startposition : (0.808468, 0.607031) >> > > endposition : (0.808468, 0.604688) >> > > used button : 3 >> > > startposition : (0.086694, 0.166406) >> > > endposition : (0.137097, 0.070313) >> > > used button : 1 >> > > startposition : (0.921371, 0.850781) >> > > endposition : (0.987903, 0.728906) >> > > used button : 1 >> > > >> > > In [2]: x_new >> > > Out[2]: >> > > array([ 0.92929293, 0.93939394, 0.94949495, 0.95959596, >> 0.96969697, >> > > 0.97979798]) >> > > >> > > In [3]: y_new >> > > Out[3]: >> > > array([ 0.80119703, 0.8072005 , 0.81312162, 0.81895978, >> 0.82471437, >> > > 0.83038482]) >> > > >> > > In [4]: >> > > ############# >> > > >> > > Please see my comments below. >> > > >> > > On Monday 20 April 2009 23:16:37 Gökhan SEVER wrote: >> > > > Thanks for elegant trick Matthias. >> > > > >> > > > I have modified onselect function following your suggestions, and it >> is >> > > > working as I wanted it to be. Select a portion and get a zoomed view >> in >> > > > a new figure. >> > > > >> > > > def onselect(eclick, erelease): >> > > > # eclick and erelease are matplotlib events at press and release >> > > > global x_new >> > > > global y_new >> > > > print ' startposition : (%f, %f)' % (eclick.xdata, eclick.ydata) >> > > > print ' endposition : (%f, %f)' % (erelease.xdata, >> > > > erelease.ydata) print ' used button : ', eclick.button >> > > > xmin = min(eclick.xdata, erelease.xdata) >> > > > xmax = max(eclick.xdata, erelease.xdata) >> > > > ymin = min(eclick.ydata, erelease.ydata) >> > > > ymax = max(eclick.ydata, erelease.ydata) >> > > > indices = (x >= xmin) & (x <= xmax) & (y >= ymin) & (y <= ymax) >> > > > x_new = x[indices] >> > > > y_new = y[indices] >> > > > fig_new = figure() >> > > > plot(x_new, y_new) >> > > > fig_new.show() >> > > > >> > > > There is still a minute point, that I would like mention again. Even >> > > >> > > though >> > > >> > > > I used global style variables I can't still see them when I quit the >> > > > program. >> > > > >> > > > What I do is run the file within IPython by run command. In my case >> the >> > > > file is 'rect.py.' and I do run rect.py. When I quit and do whos >> > > > querry, >> > > >> > > I >> > > >> > > > can't see global x_new nor y_new at the resulting lines: >> > > > >> > > > In [13]: whos >> > > > Variable Type Data/Info >> > > > -------------------------------------------- >> > > > RectangleSelector classobj >> matplotlib.widgets.RectangleSelector >> > > > ax AxesSubplot Axes(0.125,0.1;0.775x0.8) >> > > > fig function <function figure at 0xa752c6c> >> > > > onselect function <function onselect at 0xac0ec34> >> > > > toggle_selector function <function toggle_selector at >> > > >> > > 0xac0ef0c> >> > > >> > > > x ndarray 100: 100 elems, type `float64`, >> 800 >> > > > bytes y ndarray 100: 100 elems, type >> > > > `float64`, 800 bytes >> > > > >> > > > >> > > > For the masking, I was planning to use a masking scheme as given >> below. >> > > >> > > Let >> > > >> > > > say I have an array which "a" >> > > > >> > > > In [14]: a = arange(5) >> > > > >> > > > In [15]: a >> > > > Out[15]: array([0, 1, 2, 3, 4]) >> > > > >> > > > and my secondary array is "b" >> > > > >> > > > In [16]: b = array([2,3]) >> > > > >> > > > What I want to do is to mask a with b values and get an array of: >> > > > >> > > > [array([False, False, True, True, False], dtype=bool)] >> > > > >> > > > That is just an manually created array. I still don't know how to do >> > > > this programmatically in Pythonic fashion. >> > > >> > > As I mentioned before I'm not familiar with numpys masked arrays. In >> this >> > > list >> > > I read several comments on them, but I never used them. But I think >> they >> > > are >> > > what you are after. Maybe someone else can give you a hint or you try >> > > numpys >> > > online documentation. >> > > All I could provide is again a little manually work using a for-loop. >> So >> > > something like >> > > >> > > mask = zeros(len(a), dtype=bool) >> > > for index in xrange(len(a)): # run through array a >> > > if a[index] in b: >> > > mask[index] = True >> > > print mask # gives array([False, False, True, True, False], >> > > dtype=bool) >> > > >> > > Furthermore I'm not a Python expert and therefore I'm not the guy to >> ask >> > > for >> > > programing in "Pythonic fashion". Maybe some else can give a comment? >> > > >> > > best regards Matthias >> > > >> > > > Again thanks for your help. >> > > > >> > > > Gökhan >> > > > >> > > > >> > > > On Mon, Apr 20, 2009 at 4:09 AM, Matthias Michler >> > > > >> > > > <Mat...@gm...>wrote: >> > > > > Hi Gökhan, >> > > > > >> > > > > On Friday 17 April 2009 20:21:00 Gökhan SEVER wrote: >> > > > > > Thanks for the pointer Matthias, >> > > > > > >> > > > > > That is exactly what I have been looking for. >> > > > > > >> > > > > > I use the code from the RectangleSelector class help with your >> > > > > > suggested code. I know that I have to update y-axis accordingly >> to >> > > > > > x values such >> > > > > >> > > > > that >> > > > > >> > > > > > their positions and sizes must much so that I can plot them in a >> > > > > > new >> > > > > >> > > > > plot. >> > > > > >> > > > > > And I know that the answer lies in a mask; I have to create a >> mask >> > > >> > > from >> > > >> > > > > > x_new and apply it to y. Do you have any hint on this? >> > > > > >> > > > > Unfortunately I'm not familiar with numpy masks, but what I would >> do >> > > >> > > is: >> > > > > xmin = min(eclick.xdata, erelease.xdata) >> > > > > xmax = max(eclick.xdata, erelease.xdata) >> > > > > ymin = min(eclick.ydata, erelease.ydata) >> > > > > ymax = max(eclick.ydata, erelease.ydata) >> > > > > # indices inside x-range >> > > > > indices = (x>= xmin) & (x <= xmax) >> > > > > # OR: indices for data inside the selected rectangle >> > > > > #indices = (x>= xmin) & (x <= xmax) & (y>=ymin) & (y<=ymax) >> > > > > xnew = x[indices] >> > > > > ynew = y[indices] >> > > > > >> > > > > > Another point is do you have any idea how to save values from >> > > > > > inside onselect action? >> > > > > >> > > > > What do you mean by saving? >> > > > > Saving to disk? >> > > > > # for ascii format I use: >> > > > > from scipy.io import write_array >> > > > > >> > > > > # for numpy arrays you can use >> > > > > import numpy as np >> > > > > a = np.arange(10) >> > > > > a.tofile # Write array to a file as text or binary. >> > > > > >> > > > > and I think there is also some Matplotlib function for this. In >> the >> > > > > module matplotlib.mlab, which also allows reading different types >> of >> > > > > formatted data. >> > > > > >> > > > > If you think of saving inside the program. You need a global >> variable >> > > > > (statement "global x" at the beginning of onselect) otherwise all >> > > > > variables are deleted at the end of each onselect call. >> > > > > >> > > > > > For some reason my ipython session doesn't remember values after >> I >> > > >> > > run >> > > >> > > > > the >> > > > > >> > > > > > given script: >> > > > > >> > > > > see three lines above, please. >> > > > > >> > > > > best regards Matthias >> > > > > >> > > > > > from matplotlib.widgets import RectangleSelector >> > > > > > from pylab import * >> > > > > > >> > > > > > def onselect(eclick, erelease): >> > > > > > # eclick and erelease are matplotlib events at press and >> release >> > > > > > print ' startposition : (%f, %f)' % (eclick.xdata, >> > > > > > eclick.ydata) print ' endposition : (%f, %f)' % >> (erelease.xdata, >> > > > > > erelease.ydata) print ' used button : ', eclick.button >> > > > > > xmin = min(eclick.xdata, erelease.xdata) >> > > > > > xmax = max(eclick.xdata, erelease.xdata) >> > > > > > ymin = min(eclick.ydata, erelease.ydata) >> > > > > > ymax = max(eclick.ydata, erelease.ydata) >> > > > > > x_new = x[(x>= xmin) & (x <= xmax)] >> > > > > > #mask = [x == x_new[i] for i in range(len(x_new))] >> > > > > > #print mask >> > > > > > #print len(x_new) >> > > > > > #print len(y_new) >> > > > > > #fig_new = figure() >> > > > > > #plot(x_new, y_new) >> > > > > > #fig_new.show() >> > > > > > >> > > > > > def toggle_selector(event): >> > > > > > print ' Key pressed.' >> > > > > > if event.key in ['Q', 'q'] and toggle_selector.RS.active: >> > > > > > print ' RectangleSelector deactivated.' >> > > > > > toggle_selector.RS.set_active(False) >> > > > > > if event.key in ['A', 'a'] and not >> toggle_selector.RS.active: >> > > > > > print ' RectangleSelector activated.' >> > > > > > toggle_selector.RS.set_active(True) >> > > > > > >> > > > > > x = arange(100)/(99.0) >> > > > > > y = sin(x) >> > > > > > fig = figure >> > > > > > ax = subplot(111) >> > > > > > ax.plot(x,y) >> > > > > > >> > > > > > toggle_selector.RS = RectangleSelector(ax, onselect, >> > > > > > drawtype='box') connect('key_press_event', toggle_selector) >> > > > > > show() >> > > > > > >> > > > > > Gökhan >> > > > > > >> > > > > > >> > > > > > On Fri, Apr 17, 2009 at 2:31 AM, Matthias Michler >> > > > > > >> > > > > > <Mat...@gm...>wrote: >> > > > > > > Hi Gökhan, >> > > > > > > >> > > > > > > I recommend you to use matplotlib.widgets.RectangleSelector >> > > > > > > instead of the zoom functionality to select the data (An >> example >> > > > > > > can be >> > > >> > > found >> > > >> > > > > > > at >> > > >> > > >> http://matplotlib.sourceforge.net/examples/widgets/rectangle_selector.htm >> > > >> > > > > > >l). This will return you the x and y-coordinate of button press >> > > > > > > and >> > > > > >> > > > > button >> > > > > >> > > > > > > release >> > > > > > > event and with that you can take a portion of your data. >> > > > > > > Something like the following could be a starting point: >> > > > > > > x_min = min(eclick.xdata, erelease.xdata) >> > > > > > > x_max = max(eclick.xdata, erelease.xdata) >> > > > > > > x_new = x[(x>= x_min) & (x <= x_max)] >> > > > > > > >> > > > > > > where eclick and erelease correspond to the click and release >> > > > > > > event of the rectangle selection (see the example below). >> > > > > > > >> > > > > > > Opening a new figure after show can be achieved by: >> > > > > > > >> > > > > > > fig_new = plt.figure() >> > > > > > > # some plotting >> > > > > > > fig_new.show() # show up the new figure >> > > > > > > >> > > > > > > >> > > > > > > best regards Matthias >> > > > > > > >> > > > > > > >> > > > > > > yet another example for the usage of the RectangleSelector >> copied >> > > > > > > from its class documentation: >> > > > > > > >> > > > > > > """ >> > > > > > > Select a min/max range of the x axes for a matplotlib Axes >> > > > > > > >> > > > > > > Example usage:: >> > > > > > > >> > > > > > > from matplotlib.widgets import RectangleSelector >> > > > > > > from pylab import * >> > > > > > > >> > > > > > > def onselect(eclick, erelease): >> > > > > > > 'eclick and erelease are matplotlib events at press >> and >> > > > > >> > > > > release' >> > > > > >> > > > > > > print ' startposition : (%f, %f)' % (eclick.xdata, >> > > > > >> > > > > eclick.ydata) >> > > > > >> > > > > > > print ' endposition : (%f, %f)' % (erelease.xdata, >> > > > > > > erelease.ydata) >> > > > > > > print ' used button : ', eclick.button >> > > > > > > >> > > > > > > def toggle_selector(event): >> > > > > > > print ' Key pressed.' >> > > > > > > if event.key in ['Q', 'q'] and >> > > >> > > toggle_selector.RS.active: >> > > > > > > print ' RectangleSelector deactivated.' >> > > > > > > toggle_selector.RS.set_active(False) >> > > > > > > if event.key in ['A', 'a'] and not >> > > > > >> > > > > toggle_selector.RS.active: >> > > > > > > print ' RectangleSelector activated.' >> > > > > > > toggle_selector.RS.set_active(True) >> > > > > > > >> > > > > > > x = arange(100)/(99.0) >> > > > > > > y = sin(x) >> > > > > > > fig = figure >> > > > > > > ax = subplot(111) >> > > > > > > ax.plot(x,y) >> > > > > > > >> > > > > > > toggle_selector.RS = RectangleSelector(ax, onselect, >> > > > > > > drawtype='line') >> > > > > > > connect('key_press_event', toggle_selector) >> > > > > > > show() >> > > > > > > """ >> > > > > > > >> > > > > > > On Friday 17 April 2009 02:26:51 Gökhan SEVER wrote: >> > > > > > > > Hello, >> > > > > > > > >> > > > > > > > A quick question: >> > > > > > > > >> > > > > > > > I am using two numpy arrays to plot the figure shown in >> > > >> > > attachment. >> > > >> > > > > Is >> > > > > >> > > > > > > > it possible to get array indices of selected X-axes while >> using >> > > >> > > the >> > > >> > > > > > > > zoom function? Later I can create a new figure from this >> > > > > > > > selected portion instead of the same figure and/or apply an >> > > > > > > > analysis. >> > > > > > > > >> > > > > > > > Thank you. >> >> >> >> ------------------------------------------------------------------------------ >> Stay on top of everything new and different, both inside and >> around Java (TM) technology - register by April 22, and save >> $200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco. >> 300 plus technical and hands-on sessions. Register today. >> Use priority code J9JMT32. http://p.sf.net/sfu/p >> _______________________________________________ >> Matplotlib-users mailing list >> Mat...@li... >> https://lists.sourceforge.net/lists/listinfo/matplotlib-users >> > > |
|
From: Gökhan S. <gok...@gm...> - 2009-04-22 17:33:15
|
Selam Esmail, I do not think there is an easy way of learning matplotlib. (Nor there is a quick ref to make your life easier.) I have learnt mostly by using matplotlib for my homeworks ( while everyone using IDL or Matlab) --which is in my opinion has been best way to adapt myself into scientific Python lands. Having a very appealing visual face has helped me a lot to progress in this way. What I recommend you is: watching John Hunter's video at Matplotlib by John D. Hunter <http://videolectures.net/mloss08_hunter_mat/>. His introduction of matplotlib and examples he use could be very interesting to watch for you. Also you can take a look at this book: Beginning Python Visualization: Crafting Visual Transformation Scripts Good luck on your plotting adventures. Gökhan On Wed, Apr 22, 2009 at 10:30 AM, Esmail <eb...@ho...> wrote: > Hello all, > > Does anyone know of a quick reference for the various plotting > functions for pylab? I'm just getting started with this > after years of work with gnuplot. > > I found this > > http://matplotlib.sourceforge.net/api/pyplot_api.html > > which is very comprehensive and would be good for digging into > specific commands. What I'm looking for is something small enough > to print out (< 10-20 pages) that gives a sufficient overview so > that I know what's available. > > I've looked on the web without much success. I'd be grateful if > you have any pointers. > > Thanks! > Esmail > > > > ------------------------------------------------------------------------------ > Stay on top of everything new and different, both inside and > around Java (TM) technology - register by April 22, and save > $200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco. > 300 plus technical and hands-on sessions. Register today. > Use priority code J9JMT32. http://p.sf.net/sfu/p > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > |
|
From: Elan P. <ep...@gm...> - 2009-04-22 17:26:20
|
Yes, I'm using the line2D.set_data function along with the draw_artist (and a blit). I haven't made a line collection object since I don't think it will speed it up by around the factor 5 that I want. I'll try that but I still think that the ability to grab a large section of the canvas and move it would speed things up considerably as well as be useful for other things. Elan On Wed, Apr 22, 2009 at 1:10 PM, Ryan May <rm...@gm...> wrote: > On Wed, Apr 22, 2009 at 10:11 AM, Elan Pavlov <ep...@gm...> wrote: >> >> I'm trying to use matplotlib for animating data as it is received from >> an online source (online in the algorithmic >> sense not internet:). I'd like the graph plot to be updated with high >> frequency since the data changes rapidly. I've >> used the BufferRegion with copy_from_bbox / restore_region and it >> speeds up the plotting considerably but alas it's >> still not good enough (with a large number of graphs and a large >> number of data points in each graph). >> >> What I'd like to do is to utilize the fact that the animation is >> updated in a predictable fashion (i.e., scrolling off >> the screen to the left as new data arrives) in order to speed up the >> animation. The idea would be to copy the right 99% >> of the graph (or some other fraction) via some kind of function >> similar to copy_from_bbox, move it 1% to the left and >> then plot the new 1% of the data. The problem is that as far as I can >> tell the copy_from_bbox/restore_region does not >> actually allow changing the area in which it is restored. I've mucked >> around in the source files a bit but to no avail. >> >> My question is then: >> 1. Is there some other way to copy everything enclosed in a Bbox? or >> 2. Is there some way to modify the region in which data reappears when >> using restore_region? >> 3. Perhaps I'm missing something? >> >> It would also be nice if it was possible to transform the plot (i.e. >> make it larger/smaller depending on how the y-axis changes) although I >> suppose this is doable via using an auxiliary canvas. >> >> I'm sure someone else has done this since it seems pretty natural and >> useful for a variety of applications. > > Without a small example, it's hard to know for sure. Are you using > Line2D.set_data to update with new data or are you doing a new plot? Since > you have multiple graphs, have you looked at making a LineCollection object > by hand, which will decrease the number of function calls when drawing? > > Just some ideas, > > Ryan > > -- > Ryan May > Graduate Research Assistant > School of Meteorology > University of Oklahoma > Sent from Norman, Oklahoma, United States -- If I knew that a man was coming to my house with the conscious design of doing me good, I should run for my life. - Henry David Thoreau |
|
From: Ryan M. <rm...@gm...> - 2009-04-22 17:10:34
|
On Wed, Apr 22, 2009 at 10:11 AM, Elan Pavlov <ep...@gm...> wrote: > I'm trying to use matplotlib for animating data as it is received from > an online source (online in the algorithmic > sense not internet:). I'd like the graph plot to be updated with high > frequency since the data changes rapidly. I've > used the BufferRegion with copy_from_bbox / restore_region and it > speeds up the plotting considerably but alas it's > still not good enough (with a large number of graphs and a large > number of data points in each graph). > > What I'd like to do is to utilize the fact that the animation is > updated in a predictable fashion (i.e., scrolling off > the screen to the left as new data arrives) in order to speed up the > animation. The idea would be to copy the right 99% > of the graph (or some other fraction) via some kind of function > similar to copy_from_bbox, move it 1% to the left and > then plot the new 1% of the data. The problem is that as far as I can > tell the copy_from_bbox/restore_region does not > actually allow changing the area in which it is restored. I've mucked > around in the source files a bit but to no avail. > > My question is then: > 1. Is there some other way to copy everything enclosed in a Bbox? or > 2. Is there some way to modify the region in which data reappears when > using restore_region? > 3. Perhaps I'm missing something? > > It would also be nice if it was possible to transform the plot (i.e. > make it larger/smaller depending on how the y-axis changes) although I > suppose this is doable via using an auxiliary canvas. > > I'm sure someone else has done this since it seems pretty natural and > useful for a variety of applications. > Without a small example, it's hard to know for sure. Are you using Line2D.set_data to update with new data or are you doing a new plot? Since you have multiple graphs, have you looked at making a LineCollection object by hand, which will decrease the number of function calls when drawing? Just some ideas, Ryan -- Ryan May Graduate Research Assistant School of Meteorology University of Oklahoma Sent from Norman, Oklahoma, United States |
|
From: Christopher B. <Chr...@no...> - 2009-04-22 16:47:52
|
darkside wrote:
> Maybe because of the \n? Do I have to put them off before trying fromstring?
yes == fromstring/fromfile doesn't deal with mixing \n and space (or any
other sep char), which is too bad, because this is a common use.
They could use some work in general.
but if you do a: s = s.replace('\n'," ") first, it should be fine.
-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: Christopher B. <Chr...@no...> - 2009-04-22 16:45:09
|
Carlos Guâno Grohmann wrote: > I am writing an app focused in structural geology, using wxpython and > matplotlib. To be quite honest, I'm not sure if this question should > go here or in the wxpython list Well, that depends on whether the shift is a shift of the wxWindow, or if MPL is somehow putting your plot in a different place in the Figure. I do see the circle get smaller sometimes, though it doesn't shift for me -- I think it's an MPL issue: OS-X 10.4 PPC, Python2.5.4, wxPython2.8.9.1, MPL 0.98.5.2 The issue may be that you are creating anew axis in each call, but I think what you want is to be using the same axis each time. > Try this with the attached code: Your code doesn't run as-is -- the images are expected to be in a particular directory. -- you really need to make it as easy as possible for folks to test your code: http://wiki.wxpython.org/MakingSampleApps A few other comments from a quick look. - You're using tabs to indent. Like it or not, 4 spaces is the python standard now. - hard coded IDs are a pretty old style: http://wiki.wxpython.org/wxPython%20Style%20Guide - you might want to look into wxPython's "img2py" scripts, for embedding small icons in Python code. - I think Your PlotPanel has one more sizer that required -- something like this should work: box1 = wx.BoxSizer(wx.VERTICAL) st1 = wx.StaticText(self, -1, 'Plot') box1.Add(st1, 0, wx.RIGHT) self.figure = Figure(figsize=(6,6))# self.canvas = FigureCanvas(self, -1, self.figure) box1.Add(self.canvas, 1, wx.EXPAND|wx.ALL, 4) self.SetSizer(box1) open the data (1st btn), create the > plot (2nd btn), then plot the data as points (3rd and 4th btns) and > then as lines (5th btn). OK, now clean the plot (2nd btn) and plot > first as lines (5th btn) and then as points (3rd or 4th btns), and you > will see that the plot moves to the left! At least for me (Ubuntu > Linux). > > If you could give me any advice on why this is happening (and how to > prevent it), I will be very thankful. > > PS. I know my code is not as good as it could. I'm new to > OO-programing, so I still need to understand properly how to work with > classes, etc, and I promisse I will improve the code in the near > future! (any advices here are also welcome!) > > Many thanks for your help > > Carlos > > > > > > > ------------------------------------------------------------------------ > > > ------------------------------------------------------------------------ > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Stay on top of everything new and different, both inside and > around Java (TM) technology - register by April 22, and save > $200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco. > 300 plus technical and hands-on sessions. Register today. > Use priority code J9JMT32. http://p.sf.net/sfu/p > > > ------------------------------------------------------------------------ > > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- 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: Esmail <eb...@ho...> - 2009-04-22 16:40:16
|
Hello all, Does anyone know of a quick reference for the various plotting functions for pylab? I'm just getting started with this after years of work with gnuplot. I found this http://matplotlib.sourceforge.net/api/pyplot_api.html which is very comprehensive and would be good for digging into specific commands. What I'm looking for is something small enough to print out (< 10-20 pages) that gives a sufficient overview so that I know what's available. I've looked on the web without much success. I'd be grateful if you have any pointers. Thanks! Esmail |
|
From: darkside <in....@gm...> - 2009-04-22 16:11:13
|
Thank your, but:
If the initial list is:
>>> a
' 0.000000000E+00 1.806088833E-02-4.959341557E+07 0.000000000E+00
0.000000000E+00\n'
y = np.fromstring(a2,sep=' ')
>>> y
array([ 0.00000000e+00, 1.80608883e-02, -4.95934156e+07,
0.00000000e+00, 0.00000000e+00])
It works perfectly.
But if the initial list is like:
>>>b
'-2.754367381E-182.028474614E-02 6.959906258E+10 -1.390014546E-01
0.000000000E+00\n 7.484873918E-06 0.000000000E+00 0.000000000E+00
5.132910511E-03 9.159690889E-03\n 5.247460000E-03 -3.938080000E-03
-4.047670000E-03 0.000000000E+00 0.000000000E+00\n\n'
>>>np.fromstring(b,sep=' ')
array([ 0.])
>>>np.fromstring(b,sep=' ')
array([ 8.56506822e-072, 2.92021791e-033, 2.25187638e+006, ...,
6.99021630e-077, 1.39804329e-076, 2.66133772e-260])
It doesn't work in anyway.
Maybe because of the \n? Do I have to put them off before trying fromstring?
2009/4/22 Jouni K. Seppänen <jk...@ik...>
> darkside <in....@gm...> writes:
>
> >>>> x = np.fromstring(b,sep='')
>
> That should be sep=' ' (a space) to make it read ASCII representations
> of numbers. Otherwise it will interpret the string as binary, and if the
> string length happens to be a multiple of 8, you get garbage data,
> otherwise it raises the following exception:
>
> > ValueError: string size must be a multiple of element size
>
> --
> Jouni K. Seppänen
> http://www.iki.fi/jks
>
>
>
> ------------------------------------------------------------------------------
> Stay on top of everything new and different, both inside and
> around Java (TM) technology - register by April 22, and save
> $200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco.
> 300 plus technical and hands-on sessions. Register today.
> Use priority code J9JMT32. http://p.sf.net/sfu/p
> _______________________________________________
> Matplotlib-users mailing list
> Mat...@li...
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
|
|
From: Jouni K. S. <jk...@ik...> - 2009-04-22 15:30:52
|
darkside <in....@gm...> writes: >>>> x = np.fromstring(b,sep='') That should be sep=' ' (a space) to make it read ASCII representations of numbers. Otherwise it will interpret the string as binary, and if the string length happens to be a multiple of 8, you get garbage data, otherwise it raises the following exception: > ValueError: string size must be a multiple of element size -- Jouni K. Seppänen http://www.iki.fi/jks |
|
From: darkside <in....@gm...> - 2009-04-22 15:12:33
|
Thanks, your solution is very good.
But I have still one problem: the last line makes this:
>>> x = np.fromstring(b,sep='')
>>> x
array([ 8.56506822e-072, 2.92021791e-033, 2.25187638e+006, ...,
6.99021630e-077, 1.39804329e-076, 2.66133772e-260])
As you can see, it doesn't load the exponent right!
On other hand, I don't understand why I get an exception with:
>>>a
' 0.000000000E+00 1.806088833E-02-4.959341557E+07 0.000000000E+00
0.000000000E+00\n'
>>> a2 = a.replace('E-','EE').replace('-',' -').replace('EE','E-')
>>> y = np.fromstring(a2,sep='')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: string size must be a multiple of element size
Thank you
2009/4/22 Gary Ruben <gar...@gm...>
> (offlist)
> In case you haven't seen it before, there's an implied line at the start:
> import numpy as np
>
> making the code
>
> import numpy as np
> f = open(file)
> s = f.read()
> f.close()
> a = s.replace('E-','EE').replace('-',' -').replace('EE','E-')
> x = np.fromstring(a, sep=' ')
>
> Gary Ruben wrote:
>
>> How about
>>
>> f = open(file)
>> s = f.read()
>> f.close()
>> a = s.replace('E-','EE').replace('-',' -').replace('EE','E-')
>> x = np.fromstring(a, sep=' ')
>>
>> Gary R.
>>
>
|
|
From: Elan P. <ep...@gm...> - 2009-04-22 15:11:18
|
I'm trying to use matplotlib for animating data as it is received from an online source (online in the algorithmic sense not internet:). I'd like the graph plot to be updated with high frequency since the data changes rapidly. I've used the BufferRegion with copy_from_bbox / restore_region and it speeds up the plotting considerably but alas it's still not good enough (with a large number of graphs and a large number of data points in each graph). What I'd like to do is to utilize the fact that the animation is updated in a predictable fashion (i.e., scrolling off the screen to the left as new data arrives) in order to speed up the animation. The idea would be to copy the right 99% of the graph (or some other fraction) via some kind of function similar to copy_from_bbox, move it 1% to the left and then plot the new 1% of the data. The problem is that as far as I can tell the copy_from_bbox/restore_region does not actually allow changing the area in which it is restored. I've mucked around in the source files a bit but to no avail. My question is then: 1. Is there some other way to copy everything enclosed in a Bbox? or 2. Is there some way to modify the region in which data reappears when using restore_region? 3. Perhaps I'm missing something? It would also be nice if it was possible to transform the plot (i.e. make it larger/smaller depending on how the y-axis changes) although I suppose this is doable via using an auxiliary canvas. I'm sure someone else has done this since it seems pretty natural and useful for a variety of applications. -- If I knew that a man was coming to my house with the conscious design of doing me good, I should run for my life. - Henry David Thoreau |
|
From: Gary R. <gr...@bi...> - 2009-04-22 14:34:15
|
How about
f = open(file)
s = f.read()
f.close()
a = s.replace('E-','EE').replace('-',' -').replace('EE','E-')
x = np.fromstring(a, sep=' ')
Gary R.
darkside wrote:
> I think that not all de numbers use the same number of characters, the
> problem is the signed ones. This numbers use one more character for '-'
> and join the previous column.
> Your idea is quite good, but I don't know how to do it:
> If I use the pylab.load code, I suppose that I have to put something in
> "converters" option, but I haven't found how to use it.
> The other option I have found is using 'readline' of python
>
> fin = open (file, 'r')
> datos1 = fin.readline()
> fin.close()
>
> but I don't know how to split it and it seems a very rude way of doing it.
>
> Thank you very much
<snip>
|
|
From: darkside <in....@gm...> - 2009-04-22 14:12:06
|
I think that not all de numbers use the same number of characters, the problem is the signed ones. This numbers use one more character for '-' and join the previous column. Your idea is quite good, but I don't know how to do it: If I use the pylab.load code, I suppose that I have to put something in "converters" option, but I haven't found how to use it. The other option I have found is using 'readline' of python fin = open (file, 'r') datos1 = fin.readline() fin.close() but I don't know how to split it and it seems a very rude way of doing it. Thank you very much 2009/4/22 Chloe Lewis <ch...@na...> > Looks like all the numbers use the same number of characters -- try > splitting 16 characters at a time off, and then interpreting those > substrings as numbers. > > On Apr 21, 2009, at 21 Apr, 7:10 PM, darkside wrote: > > Hi, > I found a problem loading data: I have a file of signed numbers like: > > -1.370674456E+02-1.662854139E+02 0.000000000E+00 0.000000000E+00 > 0.000000000E+00 > 6.964865599E+10 8.394798002E-11 4.348192658E+03 9.455873862E+02 > 3.292484968E-09 > > The problem is that the signed numbers join so I always find an error if I > try to load this data. > > Any idea of how to bypass it? > > Thank you! > > ------------------------------------------------------------------------------ > Stay on top of everything new and different, both inside and > around Java (TM) technology - register by April 22, and save > $200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco. > 300 plus technical and hands-on sessions. Register today. > Use priority code J9JMT32. > http://p.sf.net/sfu/p_______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > > -- > Chloe Lewis > Graduate student, Amundson Lab > Division of Ecosystem Sciences, ESPM > University of California, Berkeley > 137 Mulford Hall - #3114 > Berkeley, CA 94720-3114 > ch...@na... > > > > > > |
|
From: Gökhan S. <gok...@gm...> - 2009-04-22 13:54:22
|
Huh, My definition of kill is just like you said. Inside Ipython print statements output x_new, and y_new values, but no context saving :( Worse thing is python rect.py does not nothing, not even with -d switch :( :( I will try with Ipython 0.9.1. Gökhan On Wed, Apr 22, 2009 at 4:40 AM, Matthias Michler <Mat...@gm...>wrote: > Hi Gökhan, > Hi list, > > On Tuesday 21 April 2009 19:44:18 Gökhan SEVER wrote: > > Hi Matthias, > > > > Thanks for your reply again. Unfortunately I can't read x_new or y_new > > after I kill the figures (nor when they are active). I don't know what > > exactly wrong in my configuration or IPython. I use IPython > 0.10.bzr.r1163 > > on Fedora 10. > With "kill" you mean just closing the figures with button "X", isn't it? > > What about adding the line > print x_new, y_new > after the show() in your rect.py-script? Does this give some output in > ipython > or if you run the script using "python rect.py" ? > > best regards > Matthias > > > Hopefully, I will solve the masked array riddle by reading more (although > > haven't seen a specific example similar to my question on the numpy > > reference pages), if not getting some insight from a numpy expert or like > > you said from an expert on masked arrays :) > > > > Have a good Tuesday to all. > > > > Gökhan > > > > > > On Tue, Apr 21, 2009 at 3:21 AM, Matthias Michler > > > > <Mat...@gm...>wrote: > > > Hi Gökhan, > > > Hi list, > > > Hi experts on masked arrays, > > > > > > I run the attached script (copied from your last two emails) and I can > > > use x_new, y_new after closing the figures (where x_new and y_new are > the > > > values > > > selected in the last selection). > > > > > > I don't know, what is going wrong with your script on your system. > > > > > > ### my output ########################## > > > In [1]: run rect.py > > > startposition : (0.276210, 0.592969) > > > endposition : (0.542339, 0.309375) > > > used button : 1 > > > startposition : (0.745968, 0.747656) > > > endposition : (0.745968, 0.747656) > > > used button : 1 > > > startposition : (0.645161, 0.761719) > > > endposition : (0.806452, 0.609375) > > > used button : 3 > > > startposition : (0.808468, 0.607031) > > > endposition : (0.808468, 0.604688) > > > used button : 3 > > > startposition : (0.086694, 0.166406) > > > endposition : (0.137097, 0.070313) > > > used button : 1 > > > startposition : (0.921371, 0.850781) > > > endposition : (0.987903, 0.728906) > > > used button : 1 > > > > > > In [2]: x_new > > > Out[2]: > > > array([ 0.92929293, 0.93939394, 0.94949495, 0.95959596, 0.96969697, > > > 0.97979798]) > > > > > > In [3]: y_new > > > Out[3]: > > > array([ 0.80119703, 0.8072005 , 0.81312162, 0.81895978, 0.82471437, > > > 0.83038482]) > > > > > > In [4]: > > > ############# > > > > > > Please see my comments below. > > > > > > On Monday 20 April 2009 23:16:37 Gökhan SEVER wrote: > > > > Thanks for elegant trick Matthias. > > > > > > > > I have modified onselect function following your suggestions, and it > is > > > > working as I wanted it to be. Select a portion and get a zoomed view > in > > > > a new figure. > > > > > > > > def onselect(eclick, erelease): > > > > # eclick and erelease are matplotlib events at press and release > > > > global x_new > > > > global y_new > > > > print ' startposition : (%f, %f)' % (eclick.xdata, eclick.ydata) > > > > print ' endposition : (%f, %f)' % (erelease.xdata, > > > > erelease.ydata) print ' used button : ', eclick.button > > > > xmin = min(eclick.xdata, erelease.xdata) > > > > xmax = max(eclick.xdata, erelease.xdata) > > > > ymin = min(eclick.ydata, erelease.ydata) > > > > ymax = max(eclick.ydata, erelease.ydata) > > > > indices = (x >= xmin) & (x <= xmax) & (y >= ymin) & (y <= ymax) > > > > x_new = x[indices] > > > > y_new = y[indices] > > > > fig_new = figure() > > > > plot(x_new, y_new) > > > > fig_new.show() > > > > > > > > There is still a minute point, that I would like mention again. Even > > > > > > though > > > > > > > I used global style variables I can't still see them when I quit the > > > > program. > > > > > > > > What I do is run the file within IPython by run command. In my case > the > > > > file is 'rect.py.' and I do run rect.py. When I quit and do whos > > > > querry, > > > > > > I > > > > > > > can't see global x_new nor y_new at the resulting lines: > > > > > > > > In [13]: whos > > > > Variable Type Data/Info > > > > -------------------------------------------- > > > > RectangleSelector classobj > matplotlib.widgets.RectangleSelector > > > > ax AxesSubplot Axes(0.125,0.1;0.775x0.8) > > > > fig function <function figure at 0xa752c6c> > > > > onselect function <function onselect at 0xac0ec34> > > > > toggle_selector function <function toggle_selector at > > > > > > 0xac0ef0c> > > > > > > > x ndarray 100: 100 elems, type `float64`, > 800 > > > > bytes y ndarray 100: 100 elems, type > > > > `float64`, 800 bytes > > > > > > > > > > > > For the masking, I was planning to use a masking scheme as given > below. > > > > > > Let > > > > > > > say I have an array which "a" > > > > > > > > In [14]: a = arange(5) > > > > > > > > In [15]: a > > > > Out[15]: array([0, 1, 2, 3, 4]) > > > > > > > > and my secondary array is "b" > > > > > > > > In [16]: b = array([2,3]) > > > > > > > > What I want to do is to mask a with b values and get an array of: > > > > > > > > [array([False, False, True, True, False], dtype=bool)] > > > > > > > > That is just an manually created array. I still don't know how to do > > > > this programmatically in Pythonic fashion. > > > > > > As I mentioned before I'm not familiar with numpys masked arrays. In > this > > > list > > > I read several comments on them, but I never used them. But I think > they > > > are > > > what you are after. Maybe someone else can give you a hint or you try > > > numpys > > > online documentation. > > > All I could provide is again a little manually work using a for-loop. > So > > > something like > > > > > > mask = zeros(len(a), dtype=bool) > > > for index in xrange(len(a)): # run through array a > > > if a[index] in b: > > > mask[index] = True > > > print mask # gives array([False, False, True, True, False], > > > dtype=bool) > > > > > > Furthermore I'm not a Python expert and therefore I'm not the guy to > ask > > > for > > > programing in "Pythonic fashion". Maybe some else can give a comment? > > > > > > best regards Matthias > > > > > > > Again thanks for your help. > > > > > > > > Gökhan > > > > > > > > > > > > On Mon, Apr 20, 2009 at 4:09 AM, Matthias Michler > > > > > > > > <Mat...@gm...>wrote: > > > > > Hi Gökhan, > > > > > > > > > > On Friday 17 April 2009 20:21:00 Gökhan SEVER wrote: > > > > > > Thanks for the pointer Matthias, > > > > > > > > > > > > That is exactly what I have been looking for. > > > > > > > > > > > > I use the code from the RectangleSelector class help with your > > > > > > suggested code. I know that I have to update y-axis accordingly > to > > > > > > x values such > > > > > > > > > > that > > > > > > > > > > > their positions and sizes must much so that I can plot them in a > > > > > > new > > > > > > > > > > plot. > > > > > > > > > > > And I know that the answer lies in a mask; I have to create a > mask > > > > > > from > > > > > > > > > x_new and apply it to y. Do you have any hint on this? > > > > > > > > > > Unfortunately I'm not familiar with numpy masks, but what I would > do > > > > > > is: > > > > > xmin = min(eclick.xdata, erelease.xdata) > > > > > xmax = max(eclick.xdata, erelease.xdata) > > > > > ymin = min(eclick.ydata, erelease.ydata) > > > > > ymax = max(eclick.ydata, erelease.ydata) > > > > > # indices inside x-range > > > > > indices = (x>= xmin) & (x <= xmax) > > > > > # OR: indices for data inside the selected rectangle > > > > > #indices = (x>= xmin) & (x <= xmax) & (y>=ymin) & (y<=ymax) > > > > > xnew = x[indices] > > > > > ynew = y[indices] > > > > > > > > > > > Another point is do you have any idea how to save values from > > > > > > inside onselect action? > > > > > > > > > > What do you mean by saving? > > > > > Saving to disk? > > > > > # for ascii format I use: > > > > > from scipy.io import write_array > > > > > > > > > > # for numpy arrays you can use > > > > > import numpy as np > > > > > a = np.arange(10) > > > > > a.tofile # Write array to a file as text or binary. > > > > > > > > > > and I think there is also some Matplotlib function for this. In the > > > > > module matplotlib.mlab, which also allows reading different types > of > > > > > formatted data. > > > > > > > > > > If you think of saving inside the program. You need a global > variable > > > > > (statement "global x" at the beginning of onselect) otherwise all > > > > > variables are deleted at the end of each onselect call. > > > > > > > > > > > For some reason my ipython session doesn't remember values after > I > > > > > > run > > > > > > > > the > > > > > > > > > > > given script: > > > > > > > > > > see three lines above, please. > > > > > > > > > > best regards Matthias > > > > > > > > > > > from matplotlib.widgets import RectangleSelector > > > > > > from pylab import * > > > > > > > > > > > > def onselect(eclick, erelease): > > > > > > # eclick and erelease are matplotlib events at press and release > > > > > > print ' startposition : (%f, %f)' % (eclick.xdata, > > > > > > eclick.ydata) print ' endposition : (%f, %f)' % > (erelease.xdata, > > > > > > erelease.ydata) print ' used button : ', eclick.button > > > > > > xmin = min(eclick.xdata, erelease.xdata) > > > > > > xmax = max(eclick.xdata, erelease.xdata) > > > > > > ymin = min(eclick.ydata, erelease.ydata) > > > > > > ymax = max(eclick.ydata, erelease.ydata) > > > > > > x_new = x[(x>= xmin) & (x <= xmax)] > > > > > > #mask = [x == x_new[i] for i in range(len(x_new))] > > > > > > #print mask > > > > > > #print len(x_new) > > > > > > #print len(y_new) > > > > > > #fig_new = figure() > > > > > > #plot(x_new, y_new) > > > > > > #fig_new.show() > > > > > > > > > > > > def toggle_selector(event): > > > > > > print ' Key pressed.' > > > > > > if event.key in ['Q', 'q'] and toggle_selector.RS.active: > > > > > > print ' RectangleSelector deactivated.' > > > > > > toggle_selector.RS.set_active(False) > > > > > > if event.key in ['A', 'a'] and not toggle_selector.RS.active: > > > > > > print ' RectangleSelector activated.' > > > > > > toggle_selector.RS.set_active(True) > > > > > > > > > > > > x = arange(100)/(99.0) > > > > > > y = sin(x) > > > > > > fig = figure > > > > > > ax = subplot(111) > > > > > > ax.plot(x,y) > > > > > > > > > > > > toggle_selector.RS = RectangleSelector(ax, onselect, > > > > > > drawtype='box') connect('key_press_event', toggle_selector) > > > > > > show() > > > > > > > > > > > > Gökhan > > > > > > > > > > > > > > > > > > On Fri, Apr 17, 2009 at 2:31 AM, Matthias Michler > > > > > > > > > > > > <Mat...@gm...>wrote: > > > > > > > Hi Gökhan, > > > > > > > > > > > > > > I recommend you to use matplotlib.widgets.RectangleSelector > > > > > > > instead of the zoom functionality to select the data (An > example > > > > > > > can be > > > > > > found > > > > > > > > > > at > > > > > > > http://matplotlib.sourceforge.net/examples/widgets/rectangle_selector.htm > > > > > > > > > >l). This will return you the x and y-coordinate of button press > > > > > > > and > > > > > > > > > > button > > > > > > > > > > > > release > > > > > > > event and with that you can take a portion of your data. > > > > > > > Something like the following could be a starting point: > > > > > > > x_min = min(eclick.xdata, erelease.xdata) > > > > > > > x_max = max(eclick.xdata, erelease.xdata) > > > > > > > x_new = x[(x>= x_min) & (x <= x_max)] > > > > > > > > > > > > > > where eclick and erelease correspond to the click and release > > > > > > > event of the rectangle selection (see the example below). > > > > > > > > > > > > > > Opening a new figure after show can be achieved by: > > > > > > > > > > > > > > fig_new = plt.figure() > > > > > > > # some plotting > > > > > > > fig_new.show() # show up the new figure > > > > > > > > > > > > > > > > > > > > > best regards Matthias > > > > > > > > > > > > > > > > > > > > > yet another example for the usage of the RectangleSelector > copied > > > > > > > from its class documentation: > > > > > > > > > > > > > > """ > > > > > > > Select a min/max range of the x axes for a matplotlib Axes > > > > > > > > > > > > > > Example usage:: > > > > > > > > > > > > > > from matplotlib.widgets import RectangleSelector > > > > > > > from pylab import * > > > > > > > > > > > > > > def onselect(eclick, erelease): > > > > > > > 'eclick and erelease are matplotlib events at press > and > > > > > > > > > > release' > > > > > > > > > > > > print ' startposition : (%f, %f)' % (eclick.xdata, > > > > > > > > > > eclick.ydata) > > > > > > > > > > > > print ' endposition : (%f, %f)' % (erelease.xdata, > > > > > > > erelease.ydata) > > > > > > > print ' used button : ', eclick.button > > > > > > > > > > > > > > def toggle_selector(event): > > > > > > > print ' Key pressed.' > > > > > > > if event.key in ['Q', 'q'] and > > > > > > toggle_selector.RS.active: > > > > > > > print ' RectangleSelector deactivated.' > > > > > > > toggle_selector.RS.set_active(False) > > > > > > > if event.key in ['A', 'a'] and not > > > > > > > > > > toggle_selector.RS.active: > > > > > > > print ' RectangleSelector activated.' > > > > > > > toggle_selector.RS.set_active(True) > > > > > > > > > > > > > > x = arange(100)/(99.0) > > > > > > > y = sin(x) > > > > > > > fig = figure > > > > > > > ax = subplot(111) > > > > > > > ax.plot(x,y) > > > > > > > > > > > > > > toggle_selector.RS = RectangleSelector(ax, onselect, > > > > > > > drawtype='line') > > > > > > > connect('key_press_event', toggle_selector) > > > > > > > show() > > > > > > > """ > > > > > > > > > > > > > > On Friday 17 April 2009 02:26:51 Gökhan SEVER wrote: > > > > > > > > Hello, > > > > > > > > > > > > > > > > A quick question: > > > > > > > > > > > > > > > > I am using two numpy arrays to plot the figure shown in > > > > > > attachment. > > > > > > > > Is > > > > > > > > > > > > > it possible to get array indices of selected X-axes while > using > > > > > > the > > > > > > > > > > > zoom function? Later I can create a new figure from this > > > > > > > > selected portion instead of the same figure and/or apply an > > > > > > > > analysis. > > > > > > > > > > > > > > > > Thank you. > > > > ------------------------------------------------------------------------------ > Stay on top of everything new and different, both inside and > around Java (TM) technology - register by April 22, and save > $200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco. > 300 plus technical and hands-on sessions. Register today. > Use priority code J9JMT32. http://p.sf.net/sfu/p > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > |
|
From: David K. <ma...@da...> - 2009-04-22 11:18:50
|
Hi, I'm currently doing my diploma thesis with matplotlib plots and I have a problem there. Many of the plots include an imshow(), which is completly blurred when I do a savefig() to PDF. The problem seems to be the hardcoded DPI settings in the PDF and Cairo backends (dpi=72), which is far too low for a printing quality image. When looking for the source of this setting, I found http://matplotlib.svn.sourceforge.net/viewvc/matplotlib?view=rev&revision=4933 which does not make any sense to me. Why was the kwargs readout disabled, even if the default setting was already 72dpi? If I explicitely do a savefig(file, dpi=XX), it could be assumed that I REALLY WANT a DPI setting of XX. And if I don't supply any dpi parameter, the default of 72 will be used. Best regards, David |
|
From: Armin M. <arm...@st...> - 2009-04-22 11:02:59
|
Armin Moser schrieb:
> Hi,
>
> i have an application showing some pseudo color plots as images using
> imshow. After deleting an image and calling ax.axis('tight') the limits
> of the axes are not updated correctly. Is this a bug, incorrect use or
> intended? The behavior is demonstrated in the appended script.
It looks like calling ax.relim() is the preferred way of setting limits
after deleting artists. Unfortunately this method does only consider
patches and lines. I added some lines in axes.py to support images to
(the patch against the current svn-version is appended).
If this is not the correct place for submitting patches please tell me
where I should put it instead.
Thanks and best regards
Armin
|
|
From: Thorsten K. <tho...@go...> - 2009-04-22 09:48:41
|
Good morning,
I came across a problem when building matplotlib from source. On my desktop
PC, running Ubuntu 8.10, I ran
python setup.py build
in an up-to-date svn checkout. The output (only dependencies, I don't want
to send all output, will do this if required)
============================================================================
BUILDING MATPLOTLIB
matplotlib: 0.98.6svn
python: 2.5.2 (r252:60911, Oct 5 2008, 19:24:49) [GCC
4.3.2]
platform: linux2
REQUIRED DEPENDENCIES
numpy: 1.4.0.dev6870
freetype2: 9.18.3
OPTIONAL BACKEND DEPENDENCIES
libpng: 1.2.27
Tkinter: Tkinter: 50704, Tk: 8.4, Tcl: 8.4
wxPython: 2.8.8.0
* WxAgg extension not required for wxPython >= 2.8
Gtk+: gtk+: 2.14.4, glib: 2.18.2, pygtk: 2.13.0,
pygobject: 2.15.3
Mac OS X native: no
Qt: no
Qt4: Qt: 4.4.3, PyQt4: 4.4.4
Cairo: 1.4.12
OPTIONAL DATE/TIMEZONE DEPENDENCIES
datetime: present, version unknown
dateutil: 1.4
pytz: 2008b
OPTIONAL USETEX DEPENDENCIES
dvipng: 1.11
ghostscript: 8.63
latex: 3.141592
pdftops: 3.00
[Edit setup.cfg to suppress the above messages]
============================================================================
I then copied the content of the build/lib...-directory to a folder that is
in my $PYTHONPATH. When I then try to run any program embedding matplotlib
in GTK, e.g. one of the examples that come with mpl, I receive the following
error:
--------------
Traceback (most recent call last):
File "/home/thorsten/python/matplotlib/backends/backend_gtk.py", line 352,
in expose_event
self._render_figure(self._pixmap, w, h)
File "/home/thorsten/python/matplotlib/backends/backend_gtk.py", line 340,
in _render_figure
self.figure.draw (self._renderer)
File "/home/thorsten/python/matplotlib/figure.py", line 739, in draw
if self.frameon: self.patch.draw(renderer)
File "/home/thorsten/python/matplotlib/patches.py", line 302, in draw
renderer.draw_path(gc, tpath, affine, rgbFace)
File "/home/thorsten/python/matplotlib/backends/backend_gdk.py", line 95,
in draw_path
self.gdkDrawable.draw_polygon(gc.gdkGC, True, polygon)
TypeError: sequence members must be 2-tuples
----------------
I did the same first on my laptop, running still ubuntu 8.04, the ouput was
============================================================================
BUILDING MATPLOTLIB
matplotlib: 0.98.6svn
python: 2.5.2 (r252:60911, Jul 31 2008, 17:28:52) [GCC
4.2.3 (Ubuntu 4.2.3-2ubuntu7)]
platform: linux2
REQUIRED DEPENDENCIES
numpy: 1.4.0.dev6870
freetype2: 9.16.3
OPTIONAL BACKEND DEPENDENCIES
libpng: 1.2.15beta5
Tkinter: no
* Using default library and include directories for
* Tcl and Tk because a Tk window failed to open.
* You may need to define DISPLAY for Tk to work so
* that setup can determine where your libraries are
* located. Tkinter present, but header files are not
* found. You may need to install development
* packages.
wxPython: 2.8.7.1
* WxAgg extension not required for wxPython >= 2.8
Gtk+: gtk+: 2.12.9, glib: 2.16.6, pygtk: 2.12.1,
pygobject: 2.14.2
Mac OS X native: no
Qt: no
Qt4: no
Cairo: 1.4.0
OPTIONAL DATE/TIMEZONE DEPENDENCIES
datetime: present, version unknown
dateutil: 1.3
pytz: 2007k
OPTIONAL USETEX DEPENDENCIES
dvipng: 1.9
ghostscript: 8.61
latex: 3.141592
pdftops: 3.00
[Edit setup.cfg to suppress the above messages]
============================================================================
and everything works fine with embedding.
Can anybody give me a hint what might be wrong?
Greetings,
Thorsten
|
|
From: Carlos G. G. <car...@gm...> - 2009-04-22 09:27:04
|
Dear list fellows, I am writing an app focused in structural geology, using wxpython and matplotlib. To be quite honest, I'm not sure if this question should go here or in the wxpython list (so to avoid cross-posting, I'll try here first). The app uses matplotlib to plot data from orientation data as points or lines (circles) in a stereonet (a circular plot using Lambert's equal-area projection). So far, it is in it very early stages, I have two panels (one for data display and the other for the plot itself), I can open CSV files and I can even plot them! I must say I am surprised to have achieved all this in about two week of work, with nearly no experience in python (just some small scripts), and no experience at all with wxpython/matplotilib. My problem now is that I can plot the data in three different ways, and the plots are overlaid on to the last one (I still don't know if this kind of behaviour should be removed or not), but the thing is, that depending on the order in which I plot the data, the graphic changes its position in the window! Just a brief explanation of the interface first: The option are in the toolbar, the first button opens a data file, the second one creates the stereonet, the third and fourfh plot data as points and the fifth plot as lines. Try this with the attached code: open the data (1st btn), create the plot (2nd btn), then plot the data as points (3rd and 4th btns) and then as lines (5th btn). OK, now clean the plot (2nd btn) and plot first as lines (5th btn) and then as points (3rd or 4th btns), and you will see that the plot moves to the left! At least for me (Ubuntu Linux). If you could give me any advice on why this is happening (and how to prevent it), I will be very thankful. PS. I know my code is not as good as it could. I'm new to OO-programing, so I still need to understand properly how to work with classes, etc, and I promisse I will improve the code in the near future! (any advices here are also welcome!) Many thanks for your help Carlos -- Carlos Henrique Grohmann - Geologist D.Sc. a.k.a. Guano - Linux User #89721 ResearcherID: A-9030-2008 carlos dot grohmann at gmail dot com http://www.igc.usp.br/pessoais/guano/ _________________ "Good morning, doctors. I have taken the liberty of removing Windows 95 from my hard drive." --The winning entry in a "What were HAL's first words" contest judged by 2001: A SPACE ODYSSEY creator Arthur C. Clarke Can’t stop the signal. |
|
From: darkside <in....@gm...> - 2009-04-22 02:11:35
|
Hi, I found a problem loading data: I have a file of signed numbers like: -1.370674456E+02-1.662854139E+02 0.000000000E+00 0.000000000E+00 0.000000000E+00 6.964865599E+10 8.394798002E-11 4.348192658E+03 9.455873862E+02 3.292484968E-09 The problem is that the signed numbers join so I always find an error if I try to load this data. Any idea of how to bypass it? Thank you! |
|
From: Chris B. <Chr...@no...> - 2009-04-22 00:32:34
|
John Seales wrote: > I have an intel mac running os 10.4.11. I use python 2.6 > > I am trying to install matplotlib and I can't figure it out. Can anyone > help me? It's going to be a challenge -- numpy only recently supports 2.6 -- I"d go back to 2.5 if you can. -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... |