Gnuplot との連携 Gnuplotによる関数の描画 Gnuplotによるデータのプロット Gnuplotによる3-Dグラフの描画 Gnuplotによる3-Dデータのプロット 今日のポイント グラフ描画ソフト gnuplot を体験してみよう 1 Gnuplot とは… グラフ描画専用のフリーウェア Windows版の名称は wgnuplot インストールはフォルダごとコピーするだけ 専用のコマンドウインドウにより、おもにコマンド で操作 日本語のオンラインヘルプやWebでの解説ペー ジも充実 2 Gnuplotの起動と終了 gnuplot の起動は [ スタート ] → [すべてのプログラム(P)>] → [gnuplot] を<クリック> [ スタート ] → [すべてのプログラム(P)>] → [gnuplot] を <右クリック>して、[送る(N) 送る(N)] より [ デスクトップ(ショートカットを作成)]を選び、 ショート カットアイコン を作成 ショートカットアイコン を<ダブルクリック>すると、 gnuplot が 起動 X ボタン 左上の [File] File → [Exit] Exit または、右上の [x] により、終了 3 フォントが小さい場合 gnuplot のウィンドウを <右クリック> し、3つめの [Choose Choose Font… Font... ] を選択し、フォントウィンドウを開く フォント名(F):で [Terminal Terminal] を選択し、サイズ(S): で [14] 14 を選んでおく [ OK ] ボタンを押してフォントウィンドウを閉じる 再び、gnuplot のウィンドウを <右クリック> し、一番 下の [Update Update wgnuplot.ini wgnuplot.ini] を選んで設定を保存 4 練習1 関数グラフを描いてみよう gnuplot> plot 2*x*x+3, x**3-75*x べき乗 プロンプト 300 2*x*x+3 x**3-75*x 200 100 0 -100 -200 -300 -10 -5 0 5 10 5 グラフ描画のためのTips(1) X軸ラベル、Y軸ラベルは gnuplot> set xlabel "x" gnuplot> set ylabel "y" gnuplot> replot 矢印キー↑で 前のコマンド を呼び出し、 編集できる Axes メニュー [Replot] ボタン 凡例(Key)を変えるには 改行して 続ける記号 gnuplot> plot 2*x*x+3 title "y=2x^2+3", \ > x**3-75*x title "y=x^3-75x" プロットの線を「線と点」に変えるには gnuplot> plot 2*x*x+3 with linespoints, \ > x**3-75*x with linespoints Plot メニュー 6 グラフ描画のためのTips(2) X軸範囲、Y軸範囲の指定は gnuplot> set xrange [-15:15] gnuplot> set yrange [-2000:2000] gnuplot> replot 目盛線をつけるには gnuplot> set grid Chart メニュー → Grid on 対数グラフにするには gnuplot> set logscale xy Axes メニュー set コマンドを解除するには gnuplot> unset grid Axes メニュー → Logscale xyz Chart メニュー → Grid off 7 練習2 対数グラフを描いてみよう Lorentz関数 gnuplot> plot 1/(1+x*x) gnuplot> set logscale xy gnuplot> set xrange [0.1:100] gnuplot> set yrange [0.0001:1] 1 gnuplot> set xlabel "x" gnuplot> set ylabel "y" 0.1 gnuplot> set grid 0.01 gnuplot> replot y 1/(1+x*x) 0.001 0.0001 0.1 8 1 10 x 100 sinc2(x) = (sin px/px)2 sinc2(x)の対数グラフ gnuplot> sinc(x) = sin(pi*x)/(pi*x) gnuplot> plot sinc(x)**2 gnuplot> set logscale xy gnuplot> set xrange [0.1:100] gnuplot> set yrange [0.0001:1] gnuplot> set xlabel "x" gnuplot> set ylabel "y" gnuplot> set grid gnuplot> replot 関数定義 1 sinc(x)**2 y 0.1 0.01 0.001 0.0001 0.1 9 1 10 x 100 リサージュ図形 gnuplot> set parametric gnuplot> plot cos(5*t), sin(7*t) gnuplot> set trange [-pi:pi] 1 gnuplot> set grid gnuplot> unset key 0.5 gnuplot> replot 媒介変数 t 0 凡例なし (No Key) -0.5 10 -1 -1 -0.5 0 0.5 1 練習3 データのプロット gnuplot> plot 'Z:\nyumon2\q14.csv' with lines 凡例を書き換える場合 gnuplot> plot 'Z:\nyumon2\q14.csv' \ > title "y=2x^2+3" with lines さらに線を「線と点」にかえる gnuplot> plot 'Z:\nyumon2\q14.csv' \ > title "y=2x^2+3" with linespoints 11 複数データのプロット gnuplot> plot 'Z:\nyumon2\q14_s.csv' with lines, \ > 'Z:\nyumon2\q14_s.csv' using 1:3 with lines 凡例を書き換える場合 1列目と3列目 でプロット gnuplot> plot 'Z:\nyumon2\q14_s.csv' \ > title "2x^2+3" with lines, \ > 'Z:\nyumon2\q14_s.csv' using 1:3 \ > title "x^3-75x" with lines 12 練習4 3-Dグラフの描画 gnuplot> R(x,y)=sqrt(x*x+y*y) gnuplot> gauss(x,y)=exp(-R(x,y)**2) gnuplot> splot gauss(x,y) gnuplot> set xrange [-2:2] gnuplot> set yrange [-2:2] gnuplot> set isosample 40,40 1 0.9 0.8 gnuplot> set xlabel "x" 0.7 0.6 0.5 0.4 set ylabel "y" gnuplot> 0.3 0.2 0.1 0 gnuplot> replot 関数定義 default の10 では足りない gauss(x,y) 2 1.5 1 0.5 -2 -1.5 0 y -1 -0.5 -0.5 -1 0 0.5 1 1.5 -2-1.5 x 2 13 練習5 等高線の描画 gnuplot> R(x,y)=sqrt(x*x+y*y) gnuplot> gauss(x,y)=exp(-R(x,y)**2) gnuplot> splot gauss(x,y) gnuplot> set xrange [-2:2] gnuplot> set yrange [-2:2] gnuplot> set contour base gnuplot> unset surface gnuplot> set view 0,0 gnuplot> set cntrparam levels 10 gnuplot> set xlabel "x" gnuplot> set ylabel "y" gnuplot> replot -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 0.9 0.8 0.7 2 0.6 1.50.5 0.4 1 0.3 0.50.2 0.1 0 y -0.5 -1 -1.5 -2 x 14 3-D/等高線グラフのためのTips 陰線処理 gnuplot> set hidden3d カラーマップ表示 gnuplot> set pm3d カラーパレットの指定 gnuplot> set palette gray gnuplot> set palette color gauss(x,y) 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 2 1.5 1 0.5 -2 -1.5 0 y -1 -0.5 -0.5 -1 0 0.5 1 1.5 -2-1.5 x 2 15 Milk drop Milkdrop(x,y) = exp( exp( -R(x,y) ) * ( exp( cos( R(x,y) )**20 ) + 8*sin( R(x,y) )**20 + 2*sin( 2*R(x,y) )**8 ) ) Milkdrop(x,y) 12 11 10 9 8 7 6 5 4 3 2 1 12 11 10 9 8 7 6 5 4 3 2 1 0.5 -2 -1.5 0 -1 -0.5 -0.5 -1 0 0.5 -1.5 1 1.5 -2 x 2 1 1.5 2 y 16 3-Dプロット用のデータ構造 Excelとは異なり、2-Dプロット用データを縦に 並べることで3-Dプロット用データとしている。 2-Dプロット用データの区切りには<空行>を 用いる。 3-Dプロットデータをさらに複数重ねるときに は、2行分の<空行>を境界とする。 17 練習6 3-Dデータのプロット まず、 f (x, y)=exp(-(x2 + y2)), -2 ≦ x, y ≦ 2 のgnuplot用データを作成し、gauss2.dat に 保存する。 つぎに、gnuplotにより gauss2.dat の3-D プロットを描く。 18 プログラム例 (gauss2g.c) #include <stdio.h> #include <math.h> int main(void) { int i, j, n=20; double x, y, z; for (j = -n; j <= n; j++) { y = 0.1*j; for (i = -n; i < n; i++) { x = 0.1*i; z = exp(-(x*x+y*y)); printf("% .2f, % .2f, % .3f\n",x,y,z); } printf("\n"); } return 0; } 19 実行手順 Z:\nyumon2>cl gauss2g.c ... Z:\nyumon2>gauss2g > gauss2.dat このあと、gnuplot を起動し、 gnuplot> splot 'Z:\nyumon2\gauss2.dat' \ > with lines 20 スキルアップタイム:(gauss22g.c) 1. 最初に 絶対値は fabs( ) f (r) = exp(-r2) | cos(2pr) | のデータを出力したあと、2回改行し、続けて f (r) = exp(-r2) + 1 を出力するプログラムを作成し、gauss22.dat に保存 せよ。ただし、r2 = x2+y2, -2 ≦ x, y ≦ 2. 2. つぎに、gnuplotにより gauss22.dat の3-D プロットを描け。 21 スキルアップタイムの出力例 "gauss22.dat" 2 2 1.5 1.5 1 1 0.5 0.5 0 0 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2-2 -1.5 -1 -0.5 0 0.5 1 1.5 2 22 ヘルプ、その他 Help メニュー : コマンドの詳しい使い方など コマンド、オプションは誤解されない範囲で 短く省略可 plot → p, splot → sp, replot → rep with → w, lines → l, title → t, using → u xrange → xr, xlabel → xl, logscale → logs palette → pal, hidden3d → hid など デモは C:\Gnuplot\demo\all.dem 23 faceg.dat の表示 gnuplot> gnuplot> gnuplot> gnuplot> gnuplot> gnuplot> gnuplot> gnuplot> gnuplot> set view 180, 0 真下から見る unset surface メッシュを非表示 unset xtics 軸も非表示 unset ytics 正方形にセット unset ztics グレイスケールで表示 set size square gnuplot 用にデータを並べ set pm3d 替えた faceg.dat を3D表示 set palette gray splot 'Z:\nyumon2\faceg.dat' 24 face.dat → faceg.dat の変換 #include <stdio.h> face4g.c #include <string.h> int main(void) { int i; char *p,s[520]; while (fgets(s,520,stdin)!=NULL) { p=strtok(s," "); if (p && (*p!=' ')) printf("%s\n", p); for (i=1;i<128;i++) { p=strtok(NULL," "); if (p && (*p!=' ')) printf("%s\n", p); } printf("\n"); } return 0; } 25 face.dat → faceg.dat の変換 Z:\nyumon2>cl face4g.c Z:\nyumon2>face4g < face.dat > faceg.dat 26
© Copyright 2024 ExpyDoc