/usr/share/doc/libplplot12/examples/d/x04d.d is in libplplot-dev 5.10.0+dfsg-1.
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 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | // $Id: x04d.d 12393 2013-06-27 19:49:07Z andrewross $
//
// Log plot demo.
//
import plplot;
import std.math;
import std.string;
//--------------------------------------------------------------------------
// main
//
// Illustration of logarithmic axes, and redefinition of window.
//--------------------------------------------------------------------------
int main( char[][] args )
{
// Parse and process command line arguments
plparseopts( args, PL_PARSE_FULL );
// Initialize plplot
plinit();
plfont( 2 );
// Make log plots using two different styles.
plot1( 0 );
plot1( 1 );
plend();
return 0;
}
//--------------------------------------------------------------------------
// plot1
//
// Log-linear plot.
//--------------------------------------------------------------------------
void plot1( int type )
{
PLFLT[101] freql, ampl, phase;
PLFLT f0, freq;
PLINT nlegend;
string[] text, symbols;
PLINT[] opt_array;
PLINT[] text_colors;
PLINT[] box_colors;
PLINT[] box_patterns;
PLFLT[] box_scales;
PLFLT[] box_line_widths;
PLINT[] line_colors;
PLINT[] line_styles;
PLFLT[] line_widths;
PLINT[] symbol_numbers, symbol_colors;
PLFLT[] symbol_scales;
PLFLT legend_width, legend_height;
pladv( 0 );
// Set up data for log plot
f0 = 1.0;
for ( size_t i = 0; i <= 100; i++ )
{
freql[i] = -2.0 + i / 20.0;
freq = pow( 10.0, freql[i] );
ampl[i] = 20.0 * log10( 1.0 / sqrt( 1.0 + pow( ( freq / f0 ), 2.0 ) ) );
phase[i] = -( 180.0 / PI ) * atan( freq / f0 );
}
plvpor( 0.15, 0.85, 0.1, 0.9 );
plwind( -2.0, 3.0, -80.0, 0.0 );
// Try different axis and labelling styles.
plcol0( 1 );
switch ( type )
{
case 0:
plbox( "bclnst", 0.0, 0, "bnstv", 0.0, 0 );
break;
case 1:
plbox( "bcfghlnst", 0.0, 0, "bcghnstv", 0.0, 0 );
break;
default:
break;
}
// Plot ampl vs freq
plcol0( 2 );
plline( freql, ampl );
plcol0( 2 );
plptex( 1.6, -30.0, 1.0, -20.0, 0.5, "-20 dB/decade" );
// Put labels on
plcol0( 1 );
plmtex( "b", 3.2, 0.5, 0.5, "Frequency" );
plmtex( "t", 2.0, 0.5, 0.5, "Single Pole Low-Pass Filter" );
plcol0( 2 );
plmtex( "l", 5.0, 0.5, 0.5, "Amplitude (dB)" );
// For the gridless case, put phase vs freq on same plot
if ( type == 0 )
{
plcol0( 1 );
plwind( -2.0, 3.0, -100.0, 0.0 );
plbox( "", 0.0, 0, "cmstv", 30.0, 3 );
plcol0( 3 );
plline( freql, phase );
plstring( freql, phase, "*" );
plcol0( 3 );
plmtex( "r", 5.0, 0.5, 0.5, "Phase shift (degrees)" );
nlegend = 2;
}
else
{
nlegend = 1;
}
// Initialize arrays needed for pllegend.
opt_array.length = nlegend;
text_colors.length = nlegend;
text.length = nlegend;
line_colors.length = nlegend;
line_styles.length = nlegend;
line_widths.length = nlegend;
box_colors.length = nlegend;
box_patterns.length = nlegend;
box_scales.length = nlegend;
box_line_widths.length = nlegend;
symbol_numbers.length = nlegend;
symbol_colors.length = nlegend;
symbol_scales.length = nlegend;
symbols.length = nlegend;
// Draw a legend
// First legend entry.
opt_array[0] = PL_LEGEND_LINE;
text_colors[0] = 2;
text[0] = "Amplitude";
line_colors[0] = 2;
line_styles[0] = 1;
line_widths[0] = 1.;
// Note from the above opt_array the first symbol (and box) indices
// do not have to be specified
if ( nlegend == 2 )
{
opt_array[1] = PL_LEGEND_LINE | PL_LEGEND_SYMBOL;
text_colors[1] = 3;
text[1] = "Phase shift";
line_colors[1] = 3;
line_styles[1] = 1;
line_widths[1] = 1.;
symbol_colors[1] = 3;
symbol_scales[1] = 1.;
symbol_numbers[1] = 4;
symbols[1] = "*";
// Note from the above opt_array the second box array indices
// do not have to be specified
}
plscol0a( 15, 32, 32, 32, 0.70 );
pllegend( &legend_width, &legend_height,
PL_LEGEND_BACKGROUND | PL_LEGEND_BOUNDING_BOX, 0,
0.0, 0.0, 0.1, 15,
1, 1, 0, 0,
opt_array,
1.0, 1.0, 2.0,
1., text_colors, text,
box_colors, box_patterns, box_scales, box_line_widths,
line_colors, line_styles, line_widths,
symbol_colors, symbol_scales, symbol_numbers, symbols );
}
|