/usr/share/doc/libplplot12/examples/d/x17d.d is in libplplot-dev 5.10.0+dfsg2-0.1ubuntu2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | // $Id: x17d.d 11684 2011-03-31 04:15:32Z airwin $
//
// Plots a simple stripchart with four pens.
//
import std.string;
import std.math;
import std.stdio;
import std.c.stdlib;
import plplot;
//--------------------------------------------------------------------------
// main program
//--------------------------------------------------------------------------
int main( char[][] args )
{
// Parse and process command line arguments
plparseopts( args, PL_PARSE_FULL );
// If db is used the plot is much more smooth. However, because of the
// async X behaviour, one does not have a real-time scripcharter.
// plsetopt("db", "");
// plsetopt("np", "");
// User sets up plot completely except for window and data
// Eventually settings in place when strip chart is created will be
// remembered so that multiple strip charts can be used simultaneously.
//
// Specify some reasonable defaults for ymin and ymax
// The plot will grow automatically if needed (but not shrink)
PLFLT ymin = -0.1;
PLFLT ymax = 0.1;
// Specify initial tmin and tmax -- this determines length of window.
// Also specify maximum jump in t
// This can accomodate adaptive timesteps
PLFLT tmin = 0.;
PLFLT tmax = 10.;
PLFLT tjump = 0.3; // percentage of plot to jump
// Axes options same as plbox.
// Only automatic tick generation and label placement allowed
// Eventually I'll make this fancier
PLINT colbox = 1;
PLINT collab = 3;
PLINT[4] styline = [ 2, 3, 4, 5 ]; // pens color and line style
PLINT[4] colline = [ 2, 3, 4, 5 ];
// pens legend
string[4] legline = [ "sum", "sin", "sin*noi", "sin+noi" ];
PLFLT xlab = 0.; // legend position
PLFLT ylab = 0.25;
PLINT autoy = 1; // autoscale y
PLINT acc = 1; // don't scrip, accumulate
// Initialize plplot
plinit();
pladv( 0 );
plvsta();
// Register our error variables with PLplot
// From here on, we're handling all errors here
PLINT pl_errcode;
char[160] errmsg;
plsError( &pl_errcode, errmsg.ptr );
PLINT id1;
plstripc( &id1, "bcnst", "bcnstv",
tmin, tmax, tjump, ymin, ymax,
xlab, ylab,
autoy, acc,
colbox, collab,
colline, styline, legline,
"t", "", "Strip chart demo" );
if ( pl_errcode )
{
writefln( "%s", errmsg ); // TODO: to stderr
return 1;
}
// Let plplot handle errors from here on
plsError( null, null );
autoy = 0; // autoscale y
acc = 1; // accumulate
// This is to represent a loop over time
// Let's try a random walk process
PLFLT y1 = 0.0, y2 = 0.0, y3 = 0.0, y4 = 0.0;
PLFLT dt = 0.1;
const int nsteps = 1000;
PLFLT t, noise;
for ( size_t n = 0; n < nsteps; n++ )
{
// todo: usleep?
// todo: poll?
t = n * dt;
noise = plrandd() - 0.5;
y1 += noise;
y2 = sin( t * PI / 18. );
y3 = y2 * noise;
y4 = y2 + noise / 3.;
// There is no need for all pens to have the same number of
// points or beeing equally time spaced.
if ( n % 2 )
plstripa( id1, 0, t, y1 );
if ( n % 3 )
plstripa( id1, 1, t, y2 );
if ( n % 4 )
plstripa( id1, 2, t, y3 );
if ( n % 5 )
plstripa( id1, 3, t, y4 );
/* pleop(); */ /* use double buffer (-db on command line) */
}
// Destroy strip chart and it's memory
plstripd( id1 );
plend();
return 0;
}
|