LYNCSブログ

慶應義塾大学公認団体 宇宙科学総合研究会(LYNCS)のブログです。

MATLABで生成したFigureを画像として自動で保存する

MATLABくんでちょっとしたシミュレーションやら何やらを行う時、毎回コード上の数値をちょこっと変えてみて何度もスクリプトを実行……なんてケースがあると思いますが、plotしたグラフをFigureウィンドウからいちいち保存するのが面倒ですよね。そんな時に自動で保存出来るようにする何かです。

saveas

特定のファイル形式への Figure の保存 - MATLAB saveas - MathWorks 日本

公式チュートリアルにも出てると思いますが、Figureを保存する時はsaveasを使えばOKです。以下のコードをplotが完了した直後に入れてみてください。保存先はスクリプトがあるのと同じフォルダになります。

saveas(gcf,'chart.png')

gcfについてはこちらを参照ください。現在のFigureを示すもの、くらいに思っていただければ。

現在の Figure ハンドル番号の取得 - MATLAB gcf - MathWorks 日本

で、1回だけならこのコードで大丈夫なんですが、実行の度に"chart.png"というファイル名で保存を試みると(当たり前ですが)ファイル名が重複してしまうので以下のようなエラーが出ます。

エラー: your_matlab_file (line 50)
saveas(gcf,'chart.png')

「毎回コード上の数値をちょこっと変えてみて何度もスクリプトを実行」というケースには使えないので工夫が必要です。

ファイル名に日時を入れる

連番入れてあげるのもいいですが、手っ取り早く日時を入れてあげましょう。
MATLABdatetime('now')で現在日時を取得できますが、こいつには:が含まれていてファイル名にはできないのでその辺を置換します。 (ついでにスペースとかも個人的な好みでアンダーバーに置換えてます。)

FileName = strrep(strrep(strcat('chart_',datestr(datetime('now')),'.png'),':','_'),' ','_')
saveas(gcf,FileName)

これを実行するとchart_07-Nov-2016_01_54_45.pngといった形式でファイルが保存されます。

(ゆん)