Graphics with gnuplot: Difference between revisions

From Madagascar
Jump to navigation Jump to search
Nick (talk | contribs)
inserted gnuplot scripts
Sfomel (talk | contribs)
 
(7 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[http://www.gnuplot.info/ Gnuplot] is included by default in the vast majority of Linux distributions and is also more flexible in certain ways
[http://www.gnuplot.info/ Gnuplot] is included by default in the vast majority of Linux distributions and is also more flexible in certain ways
than GLE.
than GLE.
 
==Plotting using temporary ASCII files==
Example SConstruct, that follows the one in the [[Graphics with GLE | GLE example]]:
Example SConstruct, that follows the one in the [[Graphics with GLE | GLE example]]:
<python>
<python>
from rsfproj import *
from rsf.proj import *


o1=-2
o1=-2
Line 21: Line 21:
Result('cosxpy','grey color=j')
Result('cosxpy','grey color=j')


# Prepare data for Gnuplot
# Prepare input for Gnuplot (ASCII file with data)
Flow('cosxpy.z','cosxpy',
Flow('cosxpy.z','cosxpy',
     '''
     '''
     disfil number=n col=%d | /bin/cat
     disfil number=n col=%d
     ''' % n2)
     ''' % n2)


Line 56: Line 56:
splot "cosxpy.z" matrix with lines notitle
splot "cosxpy.z" matrix with lines notitle
</pre>
</pre>
[[Image:Gnuplot_bsurf.png]]


'''cosxpy_cont.gp''':
'''cosxpy_cont.gp''':
Line 77: Line 79:
splot "cosxpy.z" matrix with lines notitle
splot "cosxpy.z" matrix with lines notitle
</pre>
</pre>
[[Image:Gnuplot_cont.png]]


'''cosxpy_surf.gp''':
'''cosxpy_surf.gp''':
Line 97: Line 101:
splot "cosxpy.z" matrix with pm3d notitle
splot "cosxpy.z" matrix with pm3d notitle
</pre>
</pre>
[[Image:Gnuplot_surf.png]]
==Plotting without temporary ASCII files==
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 (<tt>cosxpy_*.gp</tt>) must be modified by replacing <tt>splot "cosxpy.z"</tt> with <tt>splot "-"</tt> in their last line.

Latest revision as of 22:53, 15 September 2010

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')

  1. Prepare input for Gnuplot (ASCII file with data)

Flow('cosxpy.z','cosxpy',

   
   disfil number=n col=%d
    % n2)
  1. 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')

  1. 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.