Lines 1-336
Link Here
|
1 |
#! /usr/bin/env python |
|
|
2 |
|
3 |
# $Id: test.py 302 2008-01-14 22:15:19Z bmcage $ |
4 |
|
5 |
# Copyright (C) 1999-2003 Michael Haggerty <mhagger@alum.mit.edu> |
6 |
# |
7 |
# This file is licensed under the GNU Lesser General Public License |
8 |
# (LGPL). See LICENSE.txt for details. |
9 |
|
10 |
"""test.py -- Exercise the Gnuplot.py module. |
11 |
|
12 |
This module is not meant to be a flashy demonstration; rather it is a |
13 |
thorough test of many combinations of Gnuplot.py features. |
14 |
|
15 |
""" |
16 |
|
17 |
import os, time, math, tempfile |
18 |
import numpy |
19 |
|
20 |
try: |
21 |
import Gnuplot, Gnuplot.PlotItems, Gnuplot.funcutils |
22 |
except ImportError: |
23 |
# kludge in case Gnuplot hasn't been installed as a module yet: |
24 |
import __init__ |
25 |
Gnuplot = __init__ |
26 |
import PlotItems |
27 |
Gnuplot.PlotItems = PlotItems |
28 |
import funcutils |
29 |
Gnuplot.funcutils = funcutils |
30 |
|
31 |
|
32 |
def wait(str=None, prompt='Press return to show results...\n'): |
33 |
if str is not None: |
34 |
print str |
35 |
raw_input(prompt) |
36 |
|
37 |
|
38 |
def main(): |
39 |
"""Exercise the Gnuplot module.""" |
40 |
|
41 |
print ( |
42 |
'This program exercises many of the features of Gnuplot.py. The\n' |
43 |
'commands that are actually sent to gnuplot are printed for your\n' |
44 |
'enjoyment.' |
45 |
) |
46 |
|
47 |
wait('Popping up a blank gnuplot window on your screen.') |
48 |
g = Gnuplot.Gnuplot(debug=1) |
49 |
g.clear() |
50 |
|
51 |
# Make two temporary files: |
52 |
if hasattr(tempfile, 'mkstemp'): |
53 |
(fd, filename1,) = tempfile.mkstemp(text=1) |
54 |
f = os.fdopen(fd, 'w') |
55 |
(fd, filename2,) = tempfile.mkstemp(text=1) |
56 |
else: |
57 |
filename1 = tempfile.mktemp() |
58 |
f = open(filename1, 'w') |
59 |
filename2 = tempfile.mktemp() |
60 |
try: |
61 |
for x in numpy.arange(100.)/5. - 10.: |
62 |
f.write('%s %s %s\n' % (x, math.cos(x), math.sin(x))) |
63 |
f.close() |
64 |
|
65 |
print '############### test Func ###################################' |
66 |
wait('Plot a gnuplot-generated function') |
67 |
g.plot(Gnuplot.Func('sin(x)')) |
68 |
|
69 |
wait('Set title and axis labels and try replot()') |
70 |
g.title('Title') |
71 |
g.xlabel('x') |
72 |
g.ylabel('y') |
73 |
g.replot() |
74 |
|
75 |
wait('Style linespoints') |
76 |
g.plot(Gnuplot.Func('sin(x)', with_='linespoints')) |
77 |
wait('title=None') |
78 |
g.plot(Gnuplot.Func('sin(x)', title=None)) |
79 |
wait('title="Sine of x"') |
80 |
g.plot(Gnuplot.Func('sin(x)', title='Sine of x')) |
81 |
wait('axes=x2y2') |
82 |
g.plot(Gnuplot.Func('sin(x)', axes='x2y2', title='Sine of x')) |
83 |
|
84 |
print 'Change Func attributes after construction:' |
85 |
f = Gnuplot.Func('sin(x)') |
86 |
wait('Original') |
87 |
g.plot(f) |
88 |
wait('Style linespoints') |
89 |
f.set_option(with_='linespoints') |
90 |
g.plot(f) |
91 |
wait('title=None') |
92 |
f.set_option(title=None) |
93 |
g.plot(f) |
94 |
wait('title="Sine of x"') |
95 |
f.set_option(title='Sine of x') |
96 |
g.plot(f) |
97 |
wait('axes=x2y2') |
98 |
f.set_option(axes='x2y2') |
99 |
g.plot(f) |
100 |
|
101 |
print '############### test File ###################################' |
102 |
wait('Generate a File from a filename') |
103 |
g.plot(Gnuplot.File(filename1)) |
104 |
|
105 |
wait('Style lines') |
106 |
g.plot(Gnuplot.File(filename1, with_='lines')) |
107 |
|
108 |
wait('using=1, using=(1,)') |
109 |
g.plot(Gnuplot.File(filename1, using=1, with_='lines'), |
110 |
Gnuplot.File(filename1, using=(1,), with_='points')) |
111 |
wait('using=(1,2), using="1:3"') |
112 |
g.plot(Gnuplot.File(filename1, using=(1,2)), |
113 |
Gnuplot.File(filename1, using='1:3')) |
114 |
|
115 |
wait('every=5, every=(5,)') |
116 |
g.plot(Gnuplot.File(filename1, every=5, with_='lines'), |
117 |
Gnuplot.File(filename1, every=(5,), with_='points')) |
118 |
wait('every=(10,None,0), every="10::5"') |
119 |
g.plot(Gnuplot.File(filename1, with_='lines'), |
120 |
Gnuplot.File(filename1, every=(10,None,0)), |
121 |
Gnuplot.File(filename1, every='10::5')) |
122 |
|
123 |
wait('title=None') |
124 |
g.plot(Gnuplot.File(filename1, title=None)) |
125 |
wait('title="title"') |
126 |
g.plot(Gnuplot.File(filename1, title='title')) |
127 |
|
128 |
print 'Change File attributes after construction:' |
129 |
f = Gnuplot.File(filename1) |
130 |
wait('Original') |
131 |
g.plot(f) |
132 |
wait('Style linespoints') |
133 |
f.set_option(with_='linespoints') |
134 |
g.plot(f) |
135 |
wait('using=(1,3)') |
136 |
f.set_option(using=(1,3)) |
137 |
g.plot(f) |
138 |
wait('title=None') |
139 |
f.set_option(title=None) |
140 |
g.plot(f) |
141 |
|
142 |
print '############### test Data ###################################' |
143 |
x = numpy.arange(100)/5. - 10. |
144 |
y1 = numpy.cos(x) |
145 |
y2 = numpy.sin(x) |
146 |
d = numpy.transpose((x,y1,y2)) |
147 |
|
148 |
wait('Plot Data against its index') |
149 |
g.plot(Gnuplot.Data(y2, inline=0)) |
150 |
|
151 |
wait('Plot Data, specified column-by-column') |
152 |
g.plot(Gnuplot.Data(x,y2, inline=0)) |
153 |
wait('Same thing, saved to a file') |
154 |
Gnuplot.Data(x,y2, inline=0, filename=filename1) |
155 |
g.plot(Gnuplot.File(filename1)) |
156 |
wait('Same thing, inline data') |
157 |
g.plot(Gnuplot.Data(x,y2, inline=1)) |
158 |
|
159 |
wait('Plot Data, specified by an array') |
160 |
g.plot(Gnuplot.Data(d, inline=0)) |
161 |
wait('Same thing, saved to a file') |
162 |
Gnuplot.Data(d, inline=0, filename=filename1) |
163 |
g.plot(Gnuplot.File(filename1)) |
164 |
wait('Same thing, inline data') |
165 |
g.plot(Gnuplot.Data(d, inline=1)) |
166 |
wait('with_="lp 4 4"') |
167 |
g.plot(Gnuplot.Data(d, with_='lp 4 4')) |
168 |
wait('cols=0') |
169 |
g.plot(Gnuplot.Data(d, cols=0)) |
170 |
wait('cols=(0,1), cols=(0,2)') |
171 |
g.plot(Gnuplot.Data(d, cols=(0,1), inline=0), |
172 |
Gnuplot.Data(d, cols=(0,2), inline=0)) |
173 |
wait('Same thing, saved to files') |
174 |
Gnuplot.Data(d, cols=(0,1), inline=0, filename=filename1) |
175 |
Gnuplot.Data(d, cols=(0,2), inline=0, filename=filename2) |
176 |
g.plot(Gnuplot.File(filename1), Gnuplot.File(filename2)) |
177 |
wait('Same thing, inline data') |
178 |
g.plot(Gnuplot.Data(d, cols=(0,1), inline=1), |
179 |
Gnuplot.Data(d, cols=(0,2), inline=1)) |
180 |
wait('Change title and replot()') |
181 |
g.title('New title') |
182 |
g.replot() |
183 |
wait('title=None') |
184 |
g.plot(Gnuplot.Data(d, title=None)) |
185 |
wait('title="Cosine of x"') |
186 |
g.plot(Gnuplot.Data(d, title='Cosine of x')) |
187 |
|
188 |
print '############### test compute_Data ###########################' |
189 |
x = numpy.arange(100)/5. - 10. |
190 |
|
191 |
wait('Plot Data, computed by Gnuplot.py') |
192 |
g.plot( |
193 |
Gnuplot.funcutils.compute_Data(x, lambda x: math.cos(x), inline=0) |
194 |
) |
195 |
wait('Same thing, saved to a file') |
196 |
Gnuplot.funcutils.compute_Data( |
197 |
x, lambda x: math.cos(x), inline=0, filename=filename1 |
198 |
) |
199 |
g.plot(Gnuplot.File(filename1)) |
200 |
wait('Same thing, inline data') |
201 |
g.plot(Gnuplot.funcutils.compute_Data(x, math.cos, inline=1)) |
202 |
wait('with_="lp 4 4"') |
203 |
g.plot(Gnuplot.funcutils.compute_Data(x, math.cos, with_='lp 4 4')) |
204 |
|
205 |
print '############### test hardcopy ###############################' |
206 |
print '******** Generating postscript file "gp_test.ps" ********' |
207 |
wait() |
208 |
g.plot(Gnuplot.Func('cos(0.5*x*x)', with_='linespoints 2 2', |
209 |
title='cos(0.5*x^2)')) |
210 |
g.hardcopy('gp_test.ps') |
211 |
|
212 |
wait('Testing hardcopy options: mode="eps"') |
213 |
g.hardcopy('gp_test.ps', mode='eps') |
214 |
wait('Testing hardcopy options: mode="landscape"') |
215 |
g.hardcopy('gp_test.ps', mode='landscape') |
216 |
wait('Testing hardcopy options: mode="portrait"') |
217 |
g.hardcopy('gp_test.ps', mode='portrait') |
218 |
wait('Testing hardcopy options: eps=1') |
219 |
g.hardcopy('gp_test.ps', eps=1) |
220 |
wait('Testing hardcopy options: mode="default"') |
221 |
g.hardcopy('gp_test.ps', mode='default') |
222 |
wait('Testing hardcopy options: enhanced=1') |
223 |
g.hardcopy('gp_test.ps', enhanced=1) |
224 |
wait('Testing hardcopy options: enhanced=0') |
225 |
g.hardcopy('gp_test.ps', enhanced=0) |
226 |
wait('Testing hardcopy options: color=1') |
227 |
g.hardcopy('gp_test.ps', color=1) |
228 |
# For some reason, |
229 |
# g.hardcopy('gp_test.ps', color=0, solid=1) |
230 |
# doesn't work here (it doesn't activate the solid option), even |
231 |
# though the command sent to gnuplot looks correct. I'll |
232 |
# tentatively conclude that it is a gnuplot bug. ### |
233 |
wait('Testing hardcopy options: color=0') |
234 |
g.hardcopy('gp_test.ps', color=0) |
235 |
wait('Testing hardcopy options: solid=1') |
236 |
g.hardcopy('gp_test.ps', solid=1) |
237 |
wait('Testing hardcopy options: duplexing="duplex"') |
238 |
g.hardcopy('gp_test.ps', solid=0, duplexing='duplex') |
239 |
wait('Testing hardcopy options: duplexing="defaultplex"') |
240 |
g.hardcopy('gp_test.ps', duplexing='defaultplex') |
241 |
wait('Testing hardcopy options: fontname="Times-Italic"') |
242 |
g.hardcopy('gp_test.ps', fontname='Times-Italic') |
243 |
wait('Testing hardcopy options: fontsize=20') |
244 |
g.hardcopy('gp_test.ps', fontsize=20) |
245 |
|
246 |
print '******** Generating svg file "gp_test.svg" ********' |
247 |
wait() |
248 |
g.plot(Gnuplot.Func('cos(0.5*x*x)', with_='linespoints 2 2', |
249 |
title='cos(0.5*x^2)')) |
250 |
g.hardcopy('gp_test.svg', terminal='svg') |
251 |
|
252 |
wait('Testing hardcopy svg options: enhanced') |
253 |
g.hardcopy('gp_test.ps', terminal='svg', enhanced='1') |
254 |
|
255 |
|
256 |
print '############### test shortcuts ##############################' |
257 |
wait('plot Func and Data using shortcuts') |
258 |
g.plot('sin(x)', d) |
259 |
|
260 |
print '############### test splot ##################################' |
261 |
wait('a 3-d curve') |
262 |
g.splot(Gnuplot.Data(d, with_='linesp', inline=0)) |
263 |
wait('Same thing, saved to a file') |
264 |
Gnuplot.Data(d, inline=0, filename=filename1) |
265 |
g.splot(Gnuplot.File(filename1, with_='linesp')) |
266 |
wait('Same thing, inline data') |
267 |
g.splot(Gnuplot.Data(d, with_='linesp', inline=1)) |
268 |
|
269 |
print '############### test GridData and compute_GridData ##########' |
270 |
# set up x and y values at which the function will be tabulated: |
271 |
x = numpy.arange(35)/2.0 |
272 |
y = numpy.arange(30)/10.0 - 1.5 |
273 |
# Make a 2-d array containing a function of x and y. First create |
274 |
# xm and ym which contain the x and y values in a matrix form that |
275 |
# can be `broadcast' into a matrix of the appropriate shape: |
276 |
xm = x[:,numpy.newaxis] |
277 |
ym = y[numpy.newaxis,:] |
278 |
m = (numpy.sin(xm) + 0.1*xm) - ym**2 |
279 |
wait('a function of two variables from a GridData file') |
280 |
g('set parametric') |
281 |
g('set data style lines') |
282 |
g('set hidden') |
283 |
g('set contour base') |
284 |
g.xlabel('x') |
285 |
g.ylabel('y') |
286 |
g.splot(Gnuplot.GridData(m,x,y, binary=0, inline=0)) |
287 |
wait('Same thing, saved to a file') |
288 |
Gnuplot.GridData(m,x,y, binary=0, inline=0, filename=filename1) |
289 |
g.splot(Gnuplot.File(filename1, binary=0)) |
290 |
wait('Same thing, inline data') |
291 |
g.splot(Gnuplot.GridData(m,x,y, binary=0, inline=1)) |
292 |
|
293 |
wait('The same thing using binary mode') |
294 |
g.splot(Gnuplot.GridData(m,x,y, binary=1)) |
295 |
wait('Same thing, using binary mode and an intermediate file') |
296 |
Gnuplot.GridData(m,x,y, binary=1, filename=filename1) |
297 |
g.splot(Gnuplot.File(filename1, binary=1)) |
298 |
|
299 |
wait('The same thing using compute_GridData to tabulate function') |
300 |
g.splot(Gnuplot.funcutils.compute_GridData( |
301 |
x,y, lambda x,y: math.sin(x) + 0.1*x - y**2, |
302 |
)) |
303 |
wait('Same thing, with an intermediate file') |
304 |
Gnuplot.funcutils.compute_GridData( |
305 |
x,y, lambda x,y: math.sin(x) + 0.1*x - y**2, |
306 |
filename=filename1) |
307 |
g.splot(Gnuplot.File(filename1, binary=1)) |
308 |
|
309 |
wait('Use compute_GridData in ufunc and binary mode') |
310 |
g.splot(Gnuplot.funcutils.compute_GridData( |
311 |
x,y, lambda x,y: numpy.sin(x) + 0.1*x - y**2, |
312 |
ufunc=1, binary=1, |
313 |
)) |
314 |
wait('Same thing, with an intermediate file') |
315 |
Gnuplot.funcutils.compute_GridData( |
316 |
x,y, lambda x,y: numpy.sin(x) + 0.1*x - y**2, |
317 |
ufunc=1, binary=1, |
318 |
filename=filename1) |
319 |
g.splot(Gnuplot.File(filename1, binary=1)) |
320 |
|
321 |
wait('And now rotate it a bit') |
322 |
for view in range(35,70,5): |
323 |
g('set view 60, %d' % view) |
324 |
g.replot() |
325 |
time.sleep(1.0) |
326 |
|
327 |
wait(prompt='Press return to end the test.\n') |
328 |
finally: |
329 |
os.unlink(filename1) |
330 |
os.unlink(filename2) |
331 |
|
332 |
|
333 |
# when executed, just run main(): |
334 |
if __name__ == '__main__': |
335 |
main() |
336 |
|