制御工学博士の日常+備忘録

ようやく制御工学で博士を手に入れたので真っ当な人間になるべく研究以外の事とか色々と備忘録的にやっていく。そんな感じ

Scilabを使ってcsvデータからグラフ描画する

目的

実験データでcsvファイルを利用することがよくあるので、csvファイルからグラフ描画できるようにしたい。 出来れば無料で。ということでscilabを使った描画プログラムを作ってみる。

やること

  1. csvデータを取り込む
  2. データをプロット関数で描画する
  3. ラベルや軸タイトル、線太さ、色等を変更
  4. 保存

実際のソースファイル

// 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 (37.0 kB)

今回は三相交流を例にプロットしてみた。良い感じ

実行フォルダの中身

実行フォルダの中身.PNG (7.5 kB)

CSV_Graph.pngが上の保存した三相波形。 GraphPlotter_fromCSV.sceが今回の実行ファイル testDATA.csvは今回のテスト用三相データ(文字は認識できないので数値のみ※)

※文字認識もおそらくプログラム次第でできるはずだが、面倒なのでやってない。scilabオブジェクト指向型のプログラミング(pythonC/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; //凡例フォントサイズ

実行結果

PWM_Voltage.png (50.7 kB)

配列の時間データを[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);

PWM_Voltage_ms.png (52.4 kB)

まとめ

Scilabを使えばエクセルのようにデータ数が大きくなった時に固まって落ちたりそんなことにならないし、図の描画がめちゃくちゃきれいになるのでセンスのある実験結果、シミュレーション結果を表示できる。