目的
実験データでcsvファイルを利用することがよくあるので、csvファイルからグラフ描画できるようにしたい。 出来れば無料で。ということでscilabを使った描画プログラムを作ってみる。
やること
- csvデータを取り込む
- データをプロット関数で描画する
- ラベルや軸タイトル、線太さ、色等を変更
- 保存
実際のソースファイル
// CSVファイルにあるデータをグラフ描画するファイル DATA1 = csvRead('testDATA.csv') //ここにCSVデータを入れる fontsize = 5; //フォントサイズ設定 linewidth = 3; //線の太さ axd = gca(); //axd = get("current_axes");でも可。gcaは省略形 plot(DATA1(:,1), DATA1(:,2),'g-', DATA1(:,1), DATA1(:,3),'r-',DATA1(:,1), DATA1(:,4),'k-','thickness', linewidth); hl=legend(['Vu';'Vv';'Vw']); //凡例の描画 hl.font_size = fontsize; //凡例のフォントサイズ xlabel("Time [s]", "fontsize", fontsize); //X軸タイトル ylabel("Voltage [V]", "fontsize", fontsize); //Y軸タイトル axd.font_size = fontsize; //メモリフォントサイズ axd.grid=[1,1]; //gridの設定と色指定。-1はグリッド無。1は黒 axd.labels_font_size = fontsize; //凡例フォントサイズ
実行結果
今回は三相交流を例にプロットしてみた。良い感じ
実行フォルダの中身
CSV_Graph.pngが上の保存した三相波形。 GraphPlotter_fromCSV.sceが今回の実行ファイル testDATA.csvは今回のテスト用三相データ(文字は認識できないので数値のみ※)
※文字認識もおそらくプログラム次第でできるはずだが、面倒なのでやってない。scilabはオブジェクト指向型のプログラミング(pythonやC/C++)で書かれているはずなので多分文字認識もできるはず。
レポートや卒論の参考にしてください。
他の実験データを使ってみる
とある実験データを利用して軸範囲指定に対応できるようにしました。 これでさらに便利になった。
// CSVファイルにあるデータをグラフ描画するファイル //DATA1 = csvRead('testDATA.csv') //ここにCSVデータを入れる DATA1 = csvRead('20Hz_4ms_kai.csv') //ここにCSVデータを入れる fontsize = 5; //フォントサイズ設定 linewidth = 3; //線の太さ axd = gca(); //axd = get("current_axes");でも可。gcaは省略形 plot(DATA1(:,4), DATA1(:,1),'g-', DATA1(:,4), DATA1(:,2),'r-',DATA1(:,4), DATA1(:,3),'k-','thickness', linewidth); Xmin = 0; //X軸範囲の最低値 Xmax = 1e-2; //X軸範囲の最大値 Ymin = -350; //Y軸範囲の最低値 Ymax = 350; //Y軸範囲の最大値 axd.tight_limits = "ON"; //厳密に範囲表示, これをONにしないとdata_boundsの表示が完全に指定通りにならない //axd.data_bounds(:,1)=[Xmin;Xmax]; //X軸範囲の指定 axd.data_bounds=[Xmin;Xmax;Ymin;Ymax]; //X,Y軸範囲の指定 hl=legend(['CH1';'CH2';'CH1-CH2']); //凡例の描画 hl.font_size = fontsize; //凡例のフォントサイズ xlabel("Time [s]", "fontsize", fontsize); //X軸タイトル ylabel("Voltage [V]", "fontsize", fontsize); //Y軸タイトル axd.font_size = fontsize; //メモリフォントサイズ axd.grid=[1,1]; //gridの設定と色指定。-1はグリッド無。1は黒 axd.labels_font_size = fontsize; //凡例フォントサイズ
実行結果
配列の時間データを[s]⇒[ms]単位にしたり工夫すれば軸を変更することもできる。
DATA2(:,4) = DATA1(:,4)*1000; plot(DATA2(:,4), DATA1(:,1),'g-', DATA2(:,4), DATA1(:,2),'r-',DATA2(:,4), DATA1(:,3),'k-','thickness', linewidth);
まとめ
Scilabを使えばエクセルのようにデータ数が大きくなった時に固まって落ちたりそんなことにならないし、図の描画がめちゃくちゃきれいになるのでセンスのある実験結果、シミュレーション結果を表示できる。