5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

痒いとこに手が届くMATLAB関数【figure保存を1click】

Last updated at Posted at 2024-10-14

痒いとこに手が届くMATLAB関数

日々のMATLABライフをちょっと便利にするツールを作成し発信することを目指して投稿をはじめてみました。他のMATLABユーザーさんの作業効率化の一助になれば幸いです!

モチベーション

MATLABでfigureを保存するのって、地味に面倒じゃないですか?

毎回saveasコマンドを打つのも面倒だし、figureのウィンドウから「ファイル」→「名前をつけて保存」→「フォルダ・ファイル名指定」といった具合に毎回設定し直すのも面倒くさい。

そこで、GUIで簡単にfigureを保存できるツールを作ってみました!

ソースコード

GitHubで公開しています!もしよければ使ってみてください!

GitHubリポジトリへのリンク

どんなものを作ったのか?

100聞は一見にしかず。とりあえずデモです!

使い方

基本的にGUI上の操作で完結できます。

  1. コマンドウィンドウでfigCaptureと入力してEnter
  2. GUIが起動するので、UI上で以下のパラメータを設定
    • ファイル形式 (pngepspdfなど)
    • 保存場所   (既定値は現在のディレクトリ)
    • ファイル名  (既定値は現在の日時から自動生成)
  3. Captureボタンをクリックしてfigureを保存

※ファイル名について

デフォルトのファイル名には、GUIを起動した日時が含まれるので、基本的にファイル名が重複する心配はありません。ファイル名が重複した場合は上書きしないよう番号を付加して保存する仕様になっています。

※保存対象のfigureについて

保存するfigureは内部でgcfで取得しています。ですので、最後にプロットしたfigureもしくは、最後にカーソルで選択したfigureになります。

実装の中身の話

MATLABでクラス定義を行う際、値の管理はどうしていますか?
普通はクラスのプロパティに保存しますよね?
でも、このGUIツールでは少し違う方法を使っています。
設定はconfig.jsonファイルに保存!

なぜそんなことをするのか?

それは、毎回GUIを起動するたびに設定し直すのが面倒だからです。
config.jsonに保存しておけば、MATLABを再起動しても前回の設定がそのまま使えます!(私は数値解析結果を保存する用のフォルダを作成して、自動的にそこに保存されるようにしています)

ざっくりの実装内容

以下のような仕組みで実現しています。

  • クラスのプロパティはDependent属性で定義
  • プロパティに値を設定する場合は、setメソッドでconfig.jsonにデータを保存
  • プロパティの値を取得する場合は、getメソッドでconfig.jsonの内容を読み取り

これで、ユーザーはconfig.jsonを意識せずに、普通にプロパティにアクセスできます。
「毎回設定しなくてもいいように、設定をファイルに保存する仕組みを作った」ということですね!

コマンド実行にも対応!

GUIを起動して使ってもらうのが便利ですが、スクリプト実行中にfigureを保存したい場合もあるかと思います。
保存場所や拡張子、ファイル名の指定など、GUIでできることはコマンドでも実行できます。
具体的には、figCaptureクラスの静的メソッドを呼び出すことで、GUIを起動せずにfigureを保存できます。

ファイルの保存場所を設定

setPathメソッドを使えば、保存先のフォルダを指定できます。パスを指定しない場合は、GUIが起動してフォルダを選択できます。

>> figCapture.setPath('/mypath') % 保存したいパス名をchar型またはstring型で指定
>> figCapture.setPath;            % 引数がない場合は保存場所を設定するGUIが起動

保存する拡張子を設定

setExtensionメソッドで保存するファイルの拡張子を設定できます。複数の拡張子を指定することも可能です。拡張子を指定しない場合は拡張子を設定するGUIが起動します。

>> figCapture.setExtension({'eps','pdf'}); % 拡張子をcellまたはstring配列で指定
>> figCapture.setExtension;                % 引数がない場合は拡張子を設定するGUIが起動

figureを保存

captureメソッドでfigureを保存します。ファイル名を指定しない場合は、日時ベースのファイル名で保存されます。

%configに保存されている設定内容(保存場所・拡張子)でfigureを保存
>> figCapture.capture('filename'); % 指定したファイル名で保存
>> figCapture.capture;             % 日時の値から自動的に命名して保存

これらのコマンドを使えば、スクリプトから figCapture の機能をフル活用できます!
静的メソッドで設定した内容は、次にGUIを起動した際の初期設定になります。
逆に、GUIで一度設定しておけば、その内容が静的メソッドにも適用されます。
これもconfig.jsonでデータ管理をしている恩恵ですね。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?