B. 複数のプロットデータが配列に格納されている場合

先に示したように配列に格納されているデータは,パイプを通してgnuplotの標準入力に 送ることができる.複数のプロットデータの場合も同じようにできる.各列ごとにデータ をパイプを通して,データを送る.記号'e'により,各列のデータの終わりを表す.

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



ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成19年7月11日


no counter