[PYTHON MATRIX-SIG] Matrix Plot module (small announcement)
Thomas Schwaller
et@appl-math.tu-muenchen.de
Mon, 20 Nov 1995 16:07:08 +0100
Hi folks,
I promised to rewrite the plmodule for use with the matrixmodule.
The next message will contain the first test version of the module. This one
contains a test script and 'HOW TO BUILD' remarks. Trivial for most of us,
but nevertheless...
GENERAL REMARKS on plplot: (read also plmodule.c)
PlPlot is certainly not the last word on Plotting (somebody should
do an OpenGL plotting module!), but as a starting point it might be useful.
I like it because it has a Tk widget with it.
John Interrante and myself wrote it as the same time but he will not support it
anymore, that's why I am doing this job... :-)
I put both distributions together, but this new version is a really a new
thing.
All List inputs are now replaced by matrix inputs (Not backward compatible !)
Could have made boths inputs (matrix and python lists ) possible, but matrix
input is much faster and is the first choice here (MatLab style), so why people
should use the slower lists instead?
Further I added __doc__ strings everywhere (this where the previous C-comments
available now with python! :-))
The Input is not realy tested. At the moment it assumes that you are doing the
right thing. Comments are welcome here...
I hope I well get feedback from people using that module (which was done
quite fast, but I don't want let you wait! :-))
Send me as much scripts using that stuff (perhaps some Matlab alike procedures)
I some people want to do the missing things, you are welcome.
Mai place will be ftp://ftp.appl-math.tu-muenchen.de/pub/et/plmodule.tgz
Enjoy it...
Tom
HOW TO BUILD:
1) PLplot is available by anonymous ftp from dino.ph.utexas.edu in the
plplot/ directory.
2) Install plplot (configure it with double precision and tk support)
You will get a libplplotdtk.a (or build a shared library)
3) Rebuid python with Tk and add
extern int Pltk_Init(Tcl_Interp*);
if (Pltk_Init(interp) == TCL_ERROR)
return TCL_ERROR;
in tkappinit.c and
add -lplplotdtk (+ perhaps appropriate path) in Setup at
the right place.
3a) Build the plmodule as shared library or as built in module.
4) Add the following to your TKinter.py
class PLWin(Widget):
def __init__(self, master=None, cnf={}, **kw):
Widget.__init__(self, master, 'plframe', cnf, kw)
class PLXWin(Widget):
def __init__(self, master=None, cnf={}, **kw):
Widget.__init__(self, master, 'PLXWin', cnf, kw)
#! /usr/local/bin/python
from pl import *
from Matrix import *
from Tkinter import *
class Test:
def plot0(self):
pladv(0)
plcol(1)
plvpor(0.0, 1.0, 0.0, 1.0)
plwind(0.0, 1.0, 0.0, 1.0)
plbox("bc", 0.0, 0, "bc", 0.0, 0)
plsvpa(50.0, 150.0, 100.0, 150.0)
plwind(0.0, 1.0, 0.0, 1.0)
plbox("bc", 0.0, 0, "bc", 0.0, 0)
plptex(0.5, 0.5, 1.0, 0.0, 0.5, "BOX at (50,150,100,150)")
pleop()
def plot1(self):
x = mrange(0.1, 6.1, 0.1)
y = pow(x, 2)
xs1 = zeros(6)
ys1 = zeros(6)
xmin, xmax = x[0], x[59]
ymin, ymax = y[0], y[59]
for i in range(6):
xs1[i] = x[i * 10 + 3]
ys1[i] = y[i * 10 + 3]
plcol(1)
plenv(xmin, xmax, ymin, ymax, 0, 0)
plcol(2)
pllab("(x)", "(y)", "#frPlot Example 1 : y=x#u2")
plcol(9)
plpoin(xs1, ys1, 10)
plcol(4)
plline(x, y)
pleop()
def plot2(self):
plcol(1)
plenv(0.0, 2*pi, -1.0, 1.0, 0, 1)
plcol(2)
pllab("(x)", "sin(x)", "#frPlot Example 2 : Sin Function")
plcol(3)
x = mrange(0, 2*pi, 2*pi/500)
plline(x, sin(x))
pleop()
def plot5(self):
n = 2047
data = sin(mrange(0, 2*pi, 2*pi/n))
plcol(1)
plhist(data, -1.1, 1.1, 44, 0)
plcol(2)
pllab("#frValue", "#frFrequency", "#frPlot Example 5 : Probability function
of Oscillator")
pleop()
def plot8(self):
m, n = 35, 46
x=mrange(-1, 1, 2.0/m)
y=mrange(-1, 1, 2.0/n)
r=sqrt(add.outer(x*x, y*y))
z=exp(-r*r)*cos(2*pi*r)
pladv(0)
plvpor(0.0, 1.0, 0.0, 0.9)
plwind(-1.0, 1.0, -0.9, 1.1)
plcol(1)
plw3d(1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, 60.0, 120)
plbox3('bnstu', 'x axis', 0.0, 0, 'bnstu', 'y axis', 0.0, 0, 'bcdmnstuv',
'z axis', 0.0, 0)
plcol(2)
plplot3d(x, y, z, 3, 0)
plcol(3)
plmtex('t', 1.0, 0.5, 0.5, '#frPlot Example 8 : Alt=60, Az=120')
pleop()
def plot9(self):
mypltr = lambda x, y: (2.0/34 * x -1.0, 2.0/34 * y -1.0)
nx, ny = 35, 46
mark, space = 1500, 1500
clevel = Matrix(-1.0, -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1.0)
x=mrange(-1, 1, 2.0/nx)
y=mrange(-1, 1, 2.0/ny)-1.0
z=subtract.outer(x*x, y*y)
w=multiply.outer(2*x, y)
plenv(-1.0, 1.0, -1.0, 1.0, 0, 0)
plcol(2)
plcont(z, 1, nx, 1, ny, clevel, mypltr)
plstyl(1, mark, space)
plcol(3)
plcont(w, 1, nx, 1, ny, clevel, mypltr)
plstyl(0, mark, space)
plcol(1)
pllab("X Coordinate", "Y Coordinate", "Streamlines of flow")
pleop()
def makePlotMenu(self, mBar):
Plot = Menubutton(mBar, text='Plot', underline='0')
Plot.pack(side='left', padx='2m')
Plot.menu = Menu(Plot)
Plot.menu.add('command', label='Example0', command=self.plot0)
Plot.menu.add('command', label='Example1', command=self.plot1)
Plot.menu.add('command', label='Example2', command=self.plot2)
#Plot.menu.add('command', label='Example3', command=self.plot3)
Plot.menu.add('command', label='Example5', command=self.plot5)
Plot.menu.add('command', label='Example8', command=self.plot8)
Plot.menu.add('command', label='Example9', command=self.plot9)
Plot.menu.add_separator()
Plot.menu.add('command', label='Quit', underline='0', background='red',
activebackground='green', command='exit')
Plot['menu'] = Plot.menu
return Plot
def __init__(self, master, width=550, height=412, bg='black',
relief='raised'):
self.mBar = Frame(master, relief=relief, bd='2')
self.mBar.pack(side='top', fill='x')
self.Plot = self.makePlotMenu(self.mBar)
self.glx = PLWin(master, width=`width`, height=`height`, bg=bg)
self.glx.pack()
self.QUIT = Button(master, text='QUIT', fg='red', command=master.quit,
relief=relief)
self.QUIT.pack(side='bottom', fill='both')
if __name__ == '__main__':
root=Tk()
test = Test(root, 600, 600, 'black', 'raised')
root.mainloop()
=================
MATRIX-SIG - SIG on Matrix Math for Python
send messages to: matrix-sig@python.org
administrivia to: matrix-sig-request@python.org
=================