標準入力を使わないで,いったん中間ファイルに保存しておいて,それを呼び出すことで
配列などのデータをプロットすることもできる(リスト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 }