|
From: ninjasmith <hen...@gm...> - 2010-06-29 13:52:35
|
hi there,
I've got a bit stuck with running matplotlib in interactive mode. maybe
what I want to do can't be done easily.
want I want is a simple python script which I can run with a file argument.
this will then create some plots. the script will wait for user input (via
sys.stdin.readline()), use the input to adjust a threshold and replot my
plots. after the user is satisfied with the thresholds the script exit the
loop and will perform other processing. Basically I'm trying to get a
simple interactive program with plots but without having use wxpython or
simliar
I have been trying to test the potting part of this.
I have successfully set interactive mode on and from the python interpreter
I can plot and I see my plots and updates to them without needing to use
pyplot.show().
when I run the same scripts by using 'python scriptname.py' I don't see the
plots unless I use pyplot.show().
my simple test script is as follows
############
#test interactive matplotlib plotting
import numpy as np
import sys
import matplotlib.pylab as pyp
a=np.array([0,4,5,5,3,4,5])
pyp.figure()
pyp.plot(a)
#pyp.show()
input=sys.stdin.readline()
pyp.xlabel('my xlabel %s' %input)
input=sys.stdin.readline()
any help much appreciated
--
View this message in context: http://old.nabble.com/matplotlib-in-interactive-mode-from-a-script-tp29023641p29023641.html
Sent from the matplotlib - users mailing list archive at Nabble.com.
|
|
From: ninjasmith <hen...@gm...> - 2010-07-01 15:42:29
|
> > Hi, > > I think what you are after is the interactive mode of matplotlib. You can > turn > is on by "ion" and redraw the current figure using "draw". In ipythons > "pylab" > mode this is done implicit. I attached some example lines which guide you > to > the right direction. I'm not sure why I need two draws in my attached > script, > but at least it seems to do the job. > For more infos you may visit: > http://matplotlib.sourceforge.net/users/shell.html#controlling-interactive- > updating > > Kind regards, > Matthias > > > import numpy as np > import sys > import matplotlib.pylab as pyp > > a = np.array([0, 4, 5, 5, 3, 4, 5]) > pyp.ion() > pyp.figure() > pyp.plot(a) > pyp.draw() > pyp.draw() > > input = sys.stdin.readline() > print "input 1 : %s " % (input) > pyp.xlabel('my xlabel %s' % input) > pyp.draw() > pyp.draw() > > input = sys.stdin.readline() > print "input 2 : %s " % (input) > > pyp.ioff() > pyp.show() > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by Sprint > What will you do first with EVO, the first 4G phone? > Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > that almost fixes it. I can now plot and re draw during the execution of my script. However I cannot interact with the plots. i.e. I can't zoom in on an area. when the script gets to the point where pyp.show() is called then I'm able to do this. I'm thinking there may be no way round this? or is there some way to run matplot lib plot in a different thread? -- View this message in context: http://old.nabble.com/matplotlib-in-interactive-mode-from-a-script-tp29023641p29047262.html Sent from the matplotlib - users mailing list archive at Nabble.com. |
|
From: Benjamin R. <ben...@ou...> - 2010-07-02 04:41:43
|
On Thu, Jul 1, 2010 at 10:42 AM, ninjasmith <hen...@gm...>wrote: > > > > > > > Hi, > > > > I think what you are after is the interactive mode of matplotlib. You can > > turn > > is on by "ion" and redraw the current figure using "draw". In ipythons > > "pylab" > > mode this is done implicit. I attached some example lines which guide you > > to > > the right direction. I'm not sure why I need two draws in my attached > > script, > > but at least it seems to do the job. > > For more infos you may visit: > > > http://matplotlib.sourceforge.net/users/shell.html#controlling-interactive- > > updating > > > > Kind regards, > > Matthias > > > > > > import numpy as np > > import sys > > import matplotlib.pylab as pyp > > > > a = np.array([0, 4, 5, 5, 3, 4, 5]) > > pyp.ion() > > pyp.figure() > > pyp.plot(a) > > pyp.draw() > > pyp.draw() > > > > input = sys.stdin.readline() > > print "input 1 : %s " % (input) > > pyp.xlabel('my xlabel %s' % input) > > pyp.draw() > > pyp.draw() > > > > input = sys.stdin.readline() > > print "input 2 : %s " % (input) > > > > pyp.ioff() > > pyp.show() > > > > > ------------------------------------------------------------------------------ > > This SF.net email is sponsored by Sprint > > What will you do first with EVO, the first 4G phone? > > Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first > > _______________________________________________ > > Matplotlib-users mailing list > > Mat...@li... > > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > > > > > that almost fixes it. I can now plot and re draw during the execution of > my > script. However I cannot interact with the plots. i.e. I can't zoom in on > an area. when the script gets to the point where pyp.show() is called then > I'm able to do this. I'm thinking there may be no way round this? > > or is there some way to run matplot lib plot in a different thread? > > > ipython does this, I believe, when you call it with the -pylab option, but I have never tried it with a script. Ben Root |
|
From: ninjasmith <hen...@gm...> - 2010-07-02 11:21:01
|
> ipython does this, I believe, when you call it with the -pylab option, but
I have never tried it with a script.
Ben Root
ok made some prgoress with this so thought I'd update
the following script works on widnows
'''
Created on Jul 1, 2010
@author: henrylindsaysmith
'''
# $Id: $
#test interactive matplotlib plotting
import threading
import numpy as np
import sys
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pylab as pyp
class MyThread(threading.Thread):
def __init__ (self, data, label):
self.data = data
self.label = label
threading.Thread.__init__ ( self )
def run(self):
pyp.plot(self.data)
pyp.xlabel('%s' % self.label)
pyp.show()
a = np.array([0, 4, 5, 5, 3, 4, 5])
MyThread(a,'first x label').start()
print ("please input x label")
input = sys.stdin.readline()
MyThread(a,input).start()
so basically abandoning interactive mode and running in a thread works. the
first show shows the plot which I can then interact with. After I input
from the keyboard the second plot updates the figure.
BUT
on mac I get the following errors
1) the figure window appears but has no content
2) after the keyboard input the xlabel updates and the figure content
displays and I get the following error
Exception in thread Thread-2:
Traceback (most recent call last):
File
"/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py",
line 525, in __bootstrap_inner
self.run()
File "threadedMatplotLIb.py", line 28, in run
pyp.show()
File
"/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/matplotlib/backends/backend_tkagg.py",
line 79, in show
Tk.mainloop()
File
"/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py",
line 325, in mainloop
_default_root.tk.mainloop(n)
RuntimeError: Calling Tcl from different appartment
I tried the backend macosx and the results were worse!! I'd rather use mac
if I can due to scikits.audiolab not installing in windows.
anyone shed any lights on the thread problem?
--
View this message in context: http://old.nabble.com/matplotlib-in-interactive-mode-from-a-script-tp29023641p29055179.html
Sent from the matplotlib - users mailing list archive at Nabble.com.
|
|
From: Ryan M. <rm...@gm...> - 2010-07-02 15:20:00
|
On Fri, Jul 2, 2010 at 6:20 AM, ninjasmith <hen...@gm...> wrote:
> ok made some prgoress with this so thought I'd update
>
> the following script works on widnows
>
> '''
> Created on Jul 1, 2010
>
> @author: henrylindsaysmith
> '''
> # $Id: $
>
> #test interactive matplotlib plotting
>
> import threading
> import numpy as np
> import sys
> import matplotlib
> matplotlib.use('TkAgg')
> import matplotlib.pylab as pyp
>
>
> class MyThread(threading.Thread):
>
> def __init__ (self, data, label):
> self.data = data
> self.label = label
> threading.Thread.__init__ ( self )
>
> def run(self):
> pyp.plot(self.data)
> pyp.xlabel('%s' % self.label)
> pyp.show()
>
> a = np.array([0, 4, 5, 5, 3, 4, 5])
> MyThread(a,'first x label').start()
> print ("please input x label")
> input = sys.stdin.readline()
> MyThread(a,input).start()
>
>
> so basically abandoning interactive mode and running in a thread works. the
> first show shows the plot which I can then interact with. After I input
> from the keyboard the second plot updates the figure.
>
> BUT
>
> on mac I get the following errors
>
> 1) the figure window appears but has no content
> 2) after the keyboard input the xlabel updates and the figure content
> displays and I get the following error
>
> Exception in thread Thread-2:
> Traceback (most recent call last):
> File
> "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py",
> line 525, in __bootstrap_inner
> self.run()
> File "threadedMatplotLIb.py", line 28, in run
> pyp.show()
> File
> "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/matplotlib/backends/backend_tkagg.py",
> line 79, in show
> Tk.mainloop()
> File
> "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py",
> line 325, in mainloop
> _default_root.tk.mainloop(n)
> RuntimeError: Calling Tcl from different appartment
>
> I tried the backend macosx and the results were worse!! I'd rather use mac
> if I can due to scikits.audiolab not installing in windows.
>
> anyone shed any lights on the thread problem?
A lot of GUI toolkits don't permit multi-threaded access to their
event loops. What you really want is to integrate your interaction
into that loop itself, so that the GUI handles things for you. Try
looking at the examples here:
http://matplotlib.sourceforge.net/examples/event_handling/
Specifically:
http://matplotlib.sourceforge.net/examples/event_handling/keypress_demo.html
Ryan
--
Ryan May
Graduate Research Assistant
School of Meteorology
University of Oklahoma
|