標準入力を使わないで,いったん中間ファイルに保存しておいて,それを呼び出すことで
配列などのデータをプロットすることもできる(リスト4を参照).
1 #include <stdio.h>
2 #include <math.h>
3 #define NX 720
4
5 int main(void){
6 FILE *gp;
7 int i;
8 double dx, x[NX+1], y1[NX+1], y2[NX+1], y3[NX+1];
9
10 /* ---- データ作成 ---- */
11 dx=4*M_PI/NX;
12 for(i=0; i<=NX; i++){
13 x[i]=-2*M_PI+i*dx;
14 y1[i]=sin(x[i]);
15 y2[i]=cos(x[i]);
16 y3[i]=tan(x[i]);
17 }
18
19 /* ---- グラフ作成の準備 ---- */
20 gp = popen("gnuplot -persist","w");
21 fprintf(gp, "set xrange [-6.5:6.5]\n");
22 fprintf(gp, "set yrange [-1.5:1.5]\n");
23 fprintf(gp, "plot '-' with lines linetype 1 title \"sin\",\
24 '-' with lines linetype 2 title \"cos\",\
25 '-' with lines linetype 3 title \"tan\"\n");
26
27 /* ---- 最初のデータ(sin)の書き込み ---- */
28 for(i=0; i<=NX; i++){
29 fprintf(gp,"%f\t%f\n", x[i], y1[i]);
30 }
31 fprintf(gp,"e\n");
32
33 /* ---- 2番目のデータ(cos)の書き込み ---- */
34 for(i=0; i<=NX; i++){
35 fprintf(gp,"%f\t%f\n", x[i], y2[i]);
36 }
37 fprintf(gp,"e\n");
38
39 /* ---- 3番目のデータ(tan)の書き込み ---- */
40 for(i=0; i<=NX; i++){
41 fprintf(gp,"%f\t%f\n", x[i], y3[i]);
42 }
43 fprintf(gp,"e\n");
44
45 pclose(gp);
46
47 return 0;
48 }