/usr/share/doc/libplplot12/examples/ocaml/x13.ml 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 | (* $Id: x13.ml 10463 2009-09-23 20:56:58Z hezekiahcarty $
Pie chart demo.
*)
open Plplot
let pi = atan 1.0 *. 4.0
let text = [|
"Maurice";
"Geoffrey";
"Alan";
"Rafael";
"Vince";
|]
(*--------------------------------------------------------------------------*\
* Does a simple pie chart.
\*--------------------------------------------------------------------------*)
let () =
let x = Array.make 500 0.0 in
let y = Array.make 500 0.0 in
let per = [|10.0; 32.0; 12.0; 30.0; 16.0|] in
(* Parse and process command line arguments *)
plparseopts Sys.argv [PL_PARSE_FULL];
(* Initialize plplot *)
plinit ();
pladv 0;
(* Ensure window has aspect ratio of one so circle is
* plotted as a circle. *)
plvasp 1.0;
plwind 0. 10. 0. 10.;
(* plenv 0.0 10.0 0.0 10.0 1 (-2); *)
plcol0 2;
(* All theta quantities scaled by 2*M_PI/500 to be integers to avoid
floating point logic problems. *)
let theta0 = ref 0 in
for i = 0 to 4 do
let j = ref 0 in
x.(!j) <- 5.0;
y.(!j) <- 5.0;
incr j;
(* Theta quantities multiplied by 2*M_PI/500 afterward so
in fact per is interpreted as a percentage. *)
let theta1 =
if i = 4 then
500
else
int_of_float (float_of_int !theta0 +. 5.0 *. per.(i))
in
for theta = !theta0 to theta1 do
x.(!j) <- 5.0 +. 3.0 *. cos ((2.0 *. pi /. 500.0) *. float_of_int theta);
y.(!j) <- 5.0 +. 3.0 *. sin ((2.0 *. pi /. 500.0) *. float_of_int theta);
incr j;
done;
let x' = Array.sub x 0 !j in
let y' = Array.sub y 0 !j in
plcol0 (i + 1);
plpsty ((i + 3) mod 8 + 1);
plfill x' y';
plcol0 1;
plline x' y';
let just = (2.0 *. pi /. 500.0) *. float_of_int (!theta0 + theta1) /. 2.0 in
let dx = 0.25 *. cos just in
let dy = 0.25 *. sin just in
let just =
if (!theta0 + theta1 < 250 || !theta0 + theta1 > 750) then
0.0
else
1.0
in
plptex (x.(!j / 2) +. dx) (y.(!j / 2) +. dy) 1.0 0.0 just text.(i);
theta0 := theta1;
done;
plfont 2;
plschr 0.0 1.3;
plptex 5.0 9.0 1.0 0.0 0.5 "Percentage of Sales";
(* Don't forget to call PLEND to finish off! *)
plend ();
()
|