You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(33) |
Dec
(20) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(7) |
Feb
(44) |
Mar
(51) |
Apr
(43) |
May
(43) |
Jun
(36) |
Jul
(61) |
Aug
(44) |
Sep
(25) |
Oct
(82) |
Nov
(97) |
Dec
(47) |
2005 |
Jan
(77) |
Feb
(143) |
Mar
(42) |
Apr
(31) |
May
(93) |
Jun
(93) |
Jul
(35) |
Aug
(78) |
Sep
(56) |
Oct
(44) |
Nov
(72) |
Dec
(75) |
2006 |
Jan
(116) |
Feb
(99) |
Mar
(181) |
Apr
(171) |
May
(112) |
Jun
(86) |
Jul
(91) |
Aug
(111) |
Sep
(77) |
Oct
(72) |
Nov
(57) |
Dec
(51) |
2007 |
Jan
(64) |
Feb
(116) |
Mar
(70) |
Apr
(74) |
May
(53) |
Jun
(40) |
Jul
(519) |
Aug
(151) |
Sep
(132) |
Oct
(74) |
Nov
(282) |
Dec
(190) |
2008 |
Jan
(141) |
Feb
(67) |
Mar
(69) |
Apr
(96) |
May
(227) |
Jun
(404) |
Jul
(399) |
Aug
(96) |
Sep
(120) |
Oct
(205) |
Nov
(126) |
Dec
(261) |
2009 |
Jan
(136) |
Feb
(136) |
Mar
(119) |
Apr
(124) |
May
(155) |
Jun
(98) |
Jul
(136) |
Aug
(292) |
Sep
(174) |
Oct
(126) |
Nov
(126) |
Dec
(79) |
2010 |
Jan
(109) |
Feb
(83) |
Mar
(139) |
Apr
(91) |
May
(79) |
Jun
(164) |
Jul
(184) |
Aug
(146) |
Sep
(163) |
Oct
(128) |
Nov
(70) |
Dec
(73) |
2011 |
Jan
(235) |
Feb
(165) |
Mar
(147) |
Apr
(86) |
May
(74) |
Jun
(118) |
Jul
(65) |
Aug
(75) |
Sep
(162) |
Oct
(94) |
Nov
(48) |
Dec
(44) |
2012 |
Jan
(49) |
Feb
(40) |
Mar
(88) |
Apr
(35) |
May
(52) |
Jun
(69) |
Jul
(90) |
Aug
(123) |
Sep
(112) |
Oct
(120) |
Nov
(105) |
Dec
(116) |
2013 |
Jan
(76) |
Feb
(26) |
Mar
(78) |
Apr
(43) |
May
(61) |
Jun
(53) |
Jul
(147) |
Aug
(85) |
Sep
(83) |
Oct
(122) |
Nov
(18) |
Dec
(27) |
2014 |
Jan
(58) |
Feb
(25) |
Mar
(49) |
Apr
(17) |
May
(29) |
Jun
(39) |
Jul
(53) |
Aug
(52) |
Sep
(35) |
Oct
(47) |
Nov
(110) |
Dec
(27) |
2015 |
Jan
(50) |
Feb
(93) |
Mar
(96) |
Apr
(30) |
May
(55) |
Jun
(83) |
Jul
(44) |
Aug
(8) |
Sep
(5) |
Oct
|
Nov
(1) |
Dec
(1) |
2016 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
(2) |
Jul
|
Aug
(3) |
Sep
(1) |
Oct
(3) |
Nov
|
Dec
|
2017 |
Jan
|
Feb
(5) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(3) |
Aug
|
Sep
(7) |
Oct
|
Nov
|
Dec
|
2018 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
|
|
1
(2) |
2
(1) |
3
|
4
(21) |
5
|
6
|
7
(4) |
8
(16) |
9
(15) |
10
(12) |
11
|
12
|
13
|
14
|
15
|
16
|
17
(2) |
18
(1) |
19
(1) |
20
|
21
(8) |
22
(7) |
23
(9) |
24
(1) |
25
(3) |
26
(2) |
27
(4) |
28
(2) |
29
(10) |
30
(6) |
31
(14) |
|
|
Jordan, This sounds useful, but I think it can be implemented without any new plot type, simply by using a different sort of norm to do the colormapping. I need to add this anyway, and I have a prototype. It is very simple. I will get it in within the next few days, and then you can see whether it meets your needs. Eric Jordan Dawe wrote: > So I have a (slightly) new plot type I would like to add to the > matplotlib codebase, and I'd like to ask A) if people would be > interested in the patch and B) what the best way to implement it would be. > > I am currently calling the plot type "pcontourf"--it's essentially a > pcolor, but instead of a continuous color spectra of value, it plots > discrete levels of data like contourf does. I find this kind of plot > useful for model output--it displays the model grid, and also emphasizes > data transitions, for example, between the negative and positive areas > of a plot, better than pcolor. Essentially it is just a contourf > wrapper that, instead of calling contourf with values at the 'center' of > a grid cell, calls contourf with points at the edges of the grid cell so > you end up with rectangular areas. > > If someone is actually interested in clean this up and put it into svn, > my next question is where in the codebase would be the best place to put > it so I can make a clean diff file? pyplot.py? I don't quite > understand how the matplotlib module hierarchy works. > > Jordan > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > Matplotlib-devel mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
Michael Droettboom skrev: > For some reason, when axis() is called, the "emit" flag (which > determines whether to update all of the shared axes) was being set to > False by default. There may be a good reason for this that I'm not > aware of, but it seems reasonably harmless, and doesn't break the > existing shared_axis examples. I've fixed this on the branch and the > trunk, but I'm happy to revert if anyone says "stop, bad idea!!!" > Works for me. Thanks! /Jörgen
Michael Droettboom skrev: > Ok. I'll change this in SVN. > It works for me now as well. /Jörgen
2008年1月29日, Neil Crighton <nei...@gm...>: > > I think it would be a shame to lose the current matplotlib 3d plotting > functionality, even if it's not ideal. I've found it very useful for > plotting small sets of data, and much more straightforward to use than > Mayavi or other vtk-based 3d plotting packages. > > Having said that, I'm not volunteering to make the 3d modules work > with the new transforms :-/ > I second everything ;) Matthieu -- French PhD student Website : http://matthieu-brucher.developpez.com/ Blogs : http://matt.eifelle.com and http://blog.developpez.com/?blog=92 LinkedIn : http://www.linkedin.com/in/matthieubrucher
Ooops, I had forgotten to add the Wx backend. Here is a new patch. By the way, with the wx backend, there seems to be a simple mistake in the "show" method of the figure manager, to reproduce the traceback do (with a recent ipython): ipython -wthread -pylab In [1]: f = figure() In [2]: f.show() Cheers, Gaël On Wed, Jan 30, 2008 at 03:05:13AM +0100, Gael Varoquaux wrote: > Hi all, > A while ago (a year or so), I was looking for a ginput-like function with > matplotlib. For those who don't know what I am talking about, it is a > blocking call that can be used in a script to ask the user to enter > coordinnate by clicking on the figure. This is incredibly handy, as it > allows some simple user interaction without worrying about events loop > and Co. > At the time I gave up on that. I have made progress with GUI and event > loops, and a recent post on the matplotlib-user list put me back to work > on this ( > http://www.nabble.com/ginput-is-here%21-%28for-wx-anyway%29-to14960506.html > ). > I have a preliminary patch to add this feature to matplotlib that I > attach. I add a method to the backend canvases, to be able to deal with > event-loop-handling, and following Jack Gurkesaft I create my own a small > event-loop to poll for events inside my function. This is a kludge, but it > allows to block the function while still processing events. If you have > better ideas. > I have implemented the functionnality for all the interactive backends I > could test (and thus not cocoa), but I am not too sure my gtk code is > kosher, I wouldn't mind advice on this one. > The code of ginput itself is currently in a seperate file > (matplotlib.ginput, that you can run for a demo) because I wasn't too > sure where to add it. > This is a first version of the patch. I would like comments on it, > especially where to add the code itself, and if the proposed additions to > the backends look all right. > Once I have comments, I plan to: > * Make right click cancel an input > * Allow infinite number of inputs, terminated by right-click > * Add optional display of inputs > * Rework docstrings > More suggestions welcomed, > This could (and should, IMHO) open the road to other blocking calls for > user interaction, like the selection of a window, as they make life > really easy for people wanting to hack quick data analysis scripts. > Cheers, > Gaël > Index: trunk/matplotlib/lib/matplotlib/backend_bases.py > =================================================================== > --- trunk/matplotlib/lib/matplotlib/backend_bases.py (revision 4908) > +++ trunk/matplotlib/lib/matplotlib/backend_bases.py (working copy) > @@ -1151,7 +1151,13 @@ > """ > return self.callbacks.disconnect(cid) > + def flush_events(self): > + """ Flush the GUI events for the figure. Implemented only for > + backends with GUIs. > + """ > + raise NotImplementedError > + > class FigureManagerBase: > """ > Helper class for matlab mode, wraps everything up into a neat bundle > Index: trunk/matplotlib/lib/matplotlib/ginput.py > =================================================================== > --- trunk/matplotlib/lib/matplotlib/ginput.py (revision 0) > +++ trunk/matplotlib/lib/matplotlib/ginput.py (revision 0) > @@ -0,0 +1,80 @@ > + > +from matplotlib.pyplot import gcf > +import time > + > +class BlockingMouseInput(object): > + """ Class that creates a callable object to retrieve mouse click > + in a blocking way, a la MatLab. > + """ > + > + callback = None > + verbose = False > + > + def on_click(self, event): > + """ Event handler that will be passed to the current figure to > + retrieve clicks. > + """ > + # if it's a valid click, append the coordinates to the list > + if event.inaxes: > + self.clicks.append((event.xdata, event.ydata)) > + if self.verbose: > + print "input %i: %f,%f" % (len(self.clicks), > + event.xdata, event.ydata) > + > + def __call__(self, fig, n=1, timeout=30, verbose=False): > + """ Blocking call to retrieve n coordinate pairs through mouse > + clicks. > + """ > + > + assert isinstance(n, int), "Requires an integer argument" > + > + # Ensure that the current figure is shown > + fig.show() > + # connect the click events to the on_click function call > + self.callback = fig.canvas.mpl_connect('button_press_event', > + self.on_click) > + > + # initialize the list of click coordinates > + self.clicks = [] > + > + self.verbose = verbose > + > + # wait for n clicks > + counter = 0 > + while len(self.clicks) < n: > + fig.canvas.flush_events() > + # rest for a moment > + time.sleep(0.01) > + > + # check for a timeout > + counter += 1 > + if timeout > 0 and counter > timeout/0.01: > + print "ginput timeout"; > + break; > + > + # All done! Disconnect the event and return what we have > + fig.canvas.mpl_disconnect(self.callback) > + self.callback = None > + return self.clicks > + > + > +def ginput(n=1, timeout=30, verbose=False): > + """ > + Blocking call to interact with the figure. > + > + This will wait for n clicks from the user and return a list of the > + coordinates of each click. > + > + If timeout is negative, does not timeout. > + """ > + > + blocking_mouse_input = BlockingMouseInput() > + return blocking_mouse_input(gcf(), n, timeout, verbose=verbose) > + > +if __name__ == "__main__": > + import pylab > + t = pylab.arange(10) > + pylab.plot(t, pylab.sin(t)) > + print "Please click" > + ginput(3, verbose=True) > + > Index: trunk/matplotlib/lib/matplotlib/backends/backend_qt.py > =================================================================== > --- trunk/matplotlib/lib/matplotlib/backends/backend_qt.py (revision 4908) > +++ trunk/matplotlib/lib/matplotlib/backends/backend_qt.py (working copy) > @@ -175,6 +175,9 @@ > return key > + def flush_events(self): > + qt.qApp.processEvents() > + > class FigureManagerQT( FigureManagerBase ): > """ > Public attributes > Index: trunk/matplotlib/lib/matplotlib/backends/backend_gtk.py > =================================================================== > --- trunk/matplotlib/lib/matplotlib/backends/backend_gtk.py (revision 4908) > +++ trunk/matplotlib/lib/matplotlib/backends/backend_gtk.py (working copy) > @@ -386,6 +386,13 @@ > def get_default_filetype(self): > return 'png' > + def flush_events(self): > + gtk.gdk.threads_enter() > + while gtk.events_pending(): > + gtk.main_iteration(True) > + gtk.gdk.flush() > + gtk.gdk.threads_leave() > + > class FigureManagerGTK(FigureManagerBase): > """ > Index: trunk/matplotlib/lib/matplotlib/backends/backend_tkagg.py > =================================================================== > --- trunk/matplotlib/lib/matplotlib/backends/backend_tkagg.py (revision 4908) > +++ trunk/matplotlib/lib/matplotlib/backends/backend_tkagg.py (working copy) > @@ -269,8 +269,9 @@ > key = self._get_key(event) > FigureCanvasBase.key_release_event(self, key, guiEvent=event) > + def flush_events(self): > + self._master.update() > - > class FigureManagerTkAgg(FigureManagerBase): > """ > Public attributes > Index: trunk/matplotlib/lib/matplotlib/backends/backend_qt4.py > =================================================================== > --- trunk/matplotlib/lib/matplotlib/backends/backend_qt4.py (revision 4908) > +++ trunk/matplotlib/lib/matplotlib/backends/backend_qt4.py (working copy) > @@ -13,7 +13,7 @@ > from matplotlib.mathtext import MathTextParser > from matplotlib.widgets import SubplotTool > -from PyQt4 import QtCore, QtGui > +from PyQt4 import QtCore, QtGui, Qt > backend_version = "0.9.1" > def fn_name(): return sys._getframe(1).f_code.co_name > @@ -174,6 +174,9 @@ > return key > + def flush_events(self): > + Qt.qApp.processEvents() > + > class FigureManagerQT( FigureManagerBase ): > """ > Public attributes > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > Matplotlib-devel mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-devel -- Gael Varoquaux, Quantum degenerate gases group European Laboratory for Non-Linear Spectroscopy University of Florence, Polo Scientifico Via Nello Carrara 1, I-50019-Sesto-Fiorentino (Firenze) Italy Phone: ++ 390-55-457242145 Fax: ++ 390-55-4572451 ++ and ++ Groupe d'optique atomique, Laboratoire Charles Fabry de l'Institut d'Optique Campus Polytechnique, RD 128, 91127 Palaiseau cedex FRANCE Tel : 33 (0) 1 64 53 33 23 - Fax : 33 (0) 1 64 53 31 01 Labs: 33 (0) 1 64 53 33 63 - 33 (0) 1 64 53 33 62
Hi all, A while ago (a year or so), I was looking for a ginput-like function with matplotlib. For those who don't know what I am talking about, it is a blocking call that can be used in a script to ask the user to enter coordinnate by clicking on the figure. This is incredibly handy, as it allows some simple user interaction without worrying about events loop and Co. At the time I gave up on that. I have made progress with GUI and event loops, and a recent post on the matplotlib-user list put me back to work on this ( http://www.nabble.com/ginput-is-here%21-%28for-wx-anyway%29-to14960506.html ). I have a preliminary patch to add this feature to matplotlib that I attach. I add a method to the backend canvases, to be able to deal with event-loop-handling, and following Jack Gurkesaft I create my own a small event-loop to poll for events inside my function. This is a kludge, but it allows to block the function while still processing events. If you have better ideas. I have implemented the functionnality for all the interactive backends I could test (and thus not cocoa), but I am not too sure my gtk code is kosher, I wouldn't mind advice on this one. The code of ginput itself is currently in a seperate file (matplotlib.ginput, that you can run for a demo) because I wasn't too sure where to add it. This is a first version of the patch. I would like comments on it, especially where to add the code itself, and if the proposed additions to the backends look all right. Once I have comments, I plan to: * Make right click cancel an input * Allow infinite number of inputs, terminated by right-click * Add optional display of inputs * Rework docstrings More suggestions welcomed, This could (and should, IMHO) open the road to other blocking calls for user interaction, like the selection of a window, as they make life really easy for people wanting to hack quick data analysis scripts. Cheers, Gaël