From: Mark S. <ms...@bi...> - 2005-05-30 10:51:44
|
Hi, I need to make a small application that will do real time graphs. Basically, it will receive data, and then: * store that data in a database * display it on a graph The graph will be Time vs Input so that a user can watch the graph grow. Updates may be needed as quickly as 5 times per second. Can matplotlib do this, or should I be looking at using something else? If it can, how? I've taken a browse through the website but can't find relevant information. Mark |
From: Tim L. <ti...@cs...> - 2005-05-30 11:02:05
|
On Mon, 30 May 2005, Mark Saward <ms...@bi...> wrote... > Hi, > > I need to make a small application that will do real time graphs. > Basically, it will receive data, and then: > * store that data in a database > * display it on a graph > The graph will be Time vs Input so that a user can watch the graph > grow. Updates may be needed as quickly as 5 times per second. > > Can matplotlib do this, or should I be looking at using something else? > If it can, how? I've taken a browse through the website but can't find > relevant information. Have a look at anim.py in the examples directory of source distribution. This should give you an idea of how to attack the problem. Feel free to get back to us if you have any problems. Cheers, Tim > > Mark > > > ------------------------------------------------------- > This SF.Net email is sponsored by Yahoo. > Introducing Yahoo! Search Developer Network - Create apps using Yahoo! > Search APIs Find out how you can build Yahoo! directly into your own > Applications - visit http://developer.yahoo.net/?fr=offad-ysdn-ostg-q22005 > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > `- |
From: Mark S. <ms...@bi...> - 2005-06-04 03:13:07
Attachments:
animtest.py
|
Hi, It looks good thanks, but I'm having a couple of problems (being a python and matplotlib newbie). Specifically: 1. When I don't have the sleep bit in the attached file, sometimes/often the graph will stop displaying onscreen halfway through until it is finished. I don't want it to disappear - I want to be able to reliably watch the graph as it forms 2. It flashes between the specified axis and just fitting the graph to the boundaries defined by the actual data. I want it to stay using the specified axis all the time Any help appreciated. Sorry if I shouldn't be attaching files to this list. Tim Leslie wrote: >On Mon, 30 May 2005, Mark Saward <ms...@bi...> wrote... > > > >>Hi, >> >>I need to make a small application that will do real time graphs. >>Basically, it will receive data, and then: >>* store that data in a database >>* display it on a graph >>The graph will be Time vs Input so that a user can watch the graph >>grow. Updates may be needed as quickly as 5 times per second. >> >>Can matplotlib do this, or should I be looking at using something else? >>If it can, how? I've taken a browse through the website but can't find >>relevant information. >> >> > >Have a look at anim.py in the examples directory of source distribution. >This should give you an idea of how to attack the problem. Feel free to >get back to us if you have any problems. > >Cheers, > >Tim > > > >>Mark >> >> >>------------------------------------------------------- >>This SF.Net email is sponsored by Yahoo. >>Introducing Yahoo! Search Developer Network - Create apps using Yahoo! >>Search APIs Find out how you can build Yahoo! directly into your own >>Applications - visit http://developer.yahoo.net/?fr=offad-ysdn-ostg-q22005 >>_______________________________________________ >>Matplotlib-users mailing list >>Mat...@li... >>https://lists.sourceforge.net/lists/listinfo/matplotlib-users >> >> >> >`- > > >------------------------------------------------------- >This SF.Net email is sponsored by Yahoo. >Introducing Yahoo! Search Developer Network - Create apps using Yahoo! >Search APIs Find out how you can build Yahoo! directly into your own >Applications - visit http://developer.yahoo.net/?fr=offad-ysdn-ostg-q22005 >_______________________________________________ >Matplotlib-users mailing list >Mat...@li... >https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > > |
From: John H. <jdh...@ac...> - 2005-06-04 03:34:24
|
>>>>> "Mark" == Mark Saward <ms...@bi...> writes: Mark> Hi, It looks good thanks, but I'm having a couple of Mark> problems (being a python and matplotlib newbie). You can use the "GUI neutral" pylab interface to do animation, but I don't recommend it. This is mainly for teaching, demonstration and testing purposes. For real work, I would settle on a GUI toolkit and use their event loop (idle handling or timer) to do the animation. If you are able to choose, I recommend GTKAgg as a backend for animation because it is fastest (fltk is close, I haven't profiled qtagg; wxagg and tkagg are significantly slower). See, for example, examples/dynamic_image_gtkagg.py for an example of how to use the gtk idle handler to do animation. Mark> 2. It flashes between the specified axis and just fitting the Mark> graph to the boundaries defined by the actual data. I want it Mark> to stay using the specified axis all the time I suspect this is because you are not properly controlling when drawing is done. For example, if interactive mode is on and you do for frame in myloop: axis(*rect) plot(blah) your figure will be drawn twice. Once when axis is called and once when plot is called. plot calls autoscale and may change the axis. What you want is to turn interaction off and explicitly control the time of the drawing with a call to canvas.draw() or pylab.draw() When interaction is on, all pylab commands (including axis and draw in this example) trigger a call to draw, which is not you want. What you want is something like # turn interaction off for frame in myloop: plot(something) # or set your line data, whatever.... axis(*rect) draw() Here you only draw after the axis limits have been set. Actually, in animation you rarely want to call plot for every frame. It is much more efficient to save an object and set its data, as in dynamic_image_gtkagg and anim.py. Calling plot in every frame creates a new Line2D object on each iteration of the loop and is slow. Hope this helps, JDH |
From: Mark S. <ms...@bi...> - 2005-06-04 06:24:34
|
Hi, That seems to have helped a fair bit, thanks for the tips. Mark On Fri, 2005-06-03 at 22:34 -0500, John Hunter wrote: > >>>>> "Mark" == Mark Saward <ms...@bi...> writes: > > Mark> Hi, It looks good thanks, but I'm having a couple of > Mark> problems (being a python and matplotlib newbie). > > You can use the "GUI neutral" pylab interface to do animation, but I > don't recommend it. This is mainly for teaching, demonstration and > testing purposes. For real work, I would settle on a GUI toolkit and > use their event loop (idle handling or timer) to do the animation. If > you are able to choose, I recommend GTKAgg as a backend for animation > because it is fastest (fltk is close, I haven't profiled qtagg; wxagg > and tkagg are significantly slower). > > See, for example, examples/dynamic_image_gtkagg.py for an example of > how to use the gtk idle handler to do animation. > > Mark> 2. It flashes between the specified axis and just fitting the > Mark> graph to the boundaries defined by the actual data. I want it > Mark> to stay using the specified axis all the time > > I suspect this is because you are not properly controlling when > drawing is done. For example, if interactive mode is on and you do > > for frame in myloop: > axis(*rect) > plot(blah) > > your figure will be drawn twice. Once when axis is called and once > when plot is called. plot calls autoscale and may change the axis. > What you want is to turn interaction off and explicitly control the > time of the drawing with a call to canvas.draw() or pylab.draw() > When interaction is on, all pylab commands (including axis and draw in > this example) trigger a call to draw, > which is not you want. What you want is something like > > # turn interaction off > for frame in myloop: > plot(something) # or set your line data, whatever.... > axis(*rect) > draw() > > Here you only draw after the axis limits have been set. > > Actually, in animation you rarely want to call plot for every frame. > It is much more efficient to save an object and set its data, as in > dynamic_image_gtkagg and anim.py. Calling plot in every frame creates > a new Line2D object on each iteration of the loop and is slow. > > Hope this helps, > JDH |