Single-event-mode plotting

priisdk at gmail.com priisdk at gmail.com
Thu Apr 25 04:27:54 EDT 2013


I have some questions on the example below. My intention is to replace the y values with data from some sensor connected to the computer, and to make it work in what could be called 'single-event-mode' which means that I only want to plot and store data whenever the mouse is clicked.
I have made the plotting with VPython, and I have also considered matplotlib.
However, with either of these modules I cannot see how to answer the questions 1 and 2 below.
Is there some other graphical module that will be better suited?
Notice, that I use Python 3.2.

1) Can I modify the program so that the clicks should be done in the testdisplay window on not in the scene window?

2) In the testdisplay I only want to see the actual blue point together with the hitherto stored green points. And not only that: I want to free all earlier blue points from memory. How can I do that? 



Poul Riis



from time import *
import visual.graph as visualgraph
from visual import *

scene=display(x=0, y=0, width=300, height=100,foreground=color.black,
              background=color.white)
ch=''
txt=''
inputtext='tmax: '
labeltext=label(pos=(0,0,0),text=inputtext)
while ch!='\n':
    ch=scene.kb.getkey()
    txt=txt+ch
    if ch!='\n':
        labeltext.text=inputtext+txt
tmax=eval(txt)
#labeltext.visible=0


testdisplay=visualgraph.gdisplay(title='Test', xtitle='x', ytitle='y',
                               x=0, y=75, width=500, height=500,foreground=color.black,
                               background=color.white)
testcurve = visualgraph.gcurve(color=color.blue,display=testdisplay)
testdots = visualgraph.gdots(color=color.red,display=testdisplay,size=5)
mousedots = visualgraph.gdots(color=color.green,display=testdisplay,size=10)
finalcurve = visualgraph.gcurve(color=color.magenta,display=testdisplay)

tarray=[]
yarray=[]
tstart=time()
t=time()-tstart
while t<tmax:
    rate(10)
    t=time()-tstart
    y=sin(5*pi*t/tmax)
    nevents=scene.mouse.events
    testcurve.plot(pos=(t,y))    
    testdots.plot(pos=(t,y))
    if nevents>1:
        mousedots.plot(pos=(t,y))
        scene.mouse.events = 0
        tarray.append(t)
        yarray.append(y)
for i in range(0,len(tarray)):
    finalcurve.plot(pos=(tarray[i],yarray[i]))



More information about the Python-list mailing list