Graphics with gnuplot
Gnuplot is included by default in the vast majority of Linux distributions and is also more flexible in certain ways than GLE.
Plotting using temporary ASCII files[edit]
Example SConstruct, that follows the one in the GLE example: <python> from rsf.proj import *
o1=-2 o2=-2 n1=41 n2=41 d1=0.1 d2=0.1
Flow('cosxpy',None,
math o1=%g o2=%g n1=%d n2=%d d1=%g d2=%g output="cos(x1*x1+x2*x2)*exp(-0.1*(x1*x1+x2*x2))" % (o1,o2,n1,n2,d1,d2))
Result('cosxpy','grey color=j')
- Prepare input for Gnuplot (ASCII file with data)
Flow('cosxpy.z','cosxpy',
disfil number=n col=%d % n2)
- Draw surfaces
Result('cosxpy_iso','cosxpy_bsurf.gp cosxpy.z',
gnuplot | epstopdf --filter ,suffix='.pdf')
End() </python> On some systems, the actual executable is not gnuplot, but gnuplot-minimal. Another dependency is the epstopdf utility, which is a part of LaTeX installation, usually. Gnuplot scripts can render the isometric view in slightly different ways. Three examples of Gnuplot scripts, and the images produced by each, follow:
cosxpy_bsurf.gp:
set terminal postscript eps enhanced color set output set title "Hat function (3D)" set xtics ("-2" 0, "-1" 10, "0" 20, "1" 30, "2" 40) out set ytics ("-2" 0, "-1" 10, "0" 20, "1" 30, "2" 40) out set ztics out set zrange [-1.5:1.5] set ztics 0.5 set xlabel "X-axis" set ylabel "Y-axis" set zlabel "Z-axis" offset 3,-1 set ticslevel 0.5 set palette defined (-1 "blue", 0 "white", 1 "red") set pm3d at b splot "cosxpy.z" matrix with lines notitle
cosxpy_cont.gp:
set terminal postscript eps enhanced color set output set title "Hat function (3D)" set xtics ("-2" 0, "-1" 10, "0" 20, "1" 30, "2" 40) out set ytics ("-2" 0, "-1" 10, "0" 20, "1" 30, "2" 40) out set ztics out set zrange [-1.5:1.5] set ztics 0.5 set xlabel "X-axis" set ylabel "Y-axis" set zlabel "Z-axis" offset 3,-1 set ticslevel 0.5 set cntrparam levels auto 12 set contour base set hidden3d offset 0 splot "cosxpy.z" matrix with lines notitle
cosxpy_surf.gp:
set terminal postscript eps enhanced color set output set title "Hat function (3D)" set xtics ("-2" 0, "-1" 10, "0" 20, "1" 30, "2" 40) out set ytics ("-2" 0, "-1" 10, "0" 20, "1" 30, "2" 40) out set ztics out set zrange [-1.5:1.5] set ztics 0.5 set xlabel "X-axis" set ylabel "Y-axis" set zlabel "Z-axis" offset 3,-1 set ticslevel 0.5 set palette defined (-1 "blue", 0 "white", 1 "red") set pm3d at bs splot "cosxpy.z" matrix with pm3d notitle
Plotting without temporary ASCII files[edit]
Gnuplot can also read data from the standard input. Therefore there is no need to create a temporary ASCII file (cosxpy.z in the example). The SConstruct becomes even simpler, and it is more convenient, because one can use the same Gnuplot scripts to draw different data:
<python> from rsf.proj import *
o1=-2 o2=-2 n1=41 n2=41 d1=0.1 d2=0.1
Flow('cosxpy',None,
math o1=%g o2=%g n1=%d n2=%d d1=%g d2=%g output="cos(x1*x1+x2*x2)*exp(-0.1*(x1*x1+x2*x2))" % (o1,o2,n1,n2,d1,d2))
Result('cosxpy','grey color=j')
- Draw surface with Gnuplot
Result('cosxpy_iso','cosxpy cosxpy_bsurf.gp',
disfil number=n col=%d | /bin/cat ${SOURCES[1]} - | gnuplot | epstopdf --filter % n2,suffix='.pdf')
End() </python>
To work with this SConstruct, the gnuplot scripts shown in the previous section (cosxpy_*.gp) must be modified by replacing splot "cosxpy.z" with splot "-" in their last line.