マルチプロット / MultiPlot FRONT PAGE
最終更新日:2024/04/03

コレは何?/What is this?

MATLAB標準の素の figure、subplot、plot などで作成したグラフは、そのままでは論文用としては不適です。 余白広すぎ、多変数の時系列データを縦に並べると無駄な空間が多すぎ、フォント小さすぎ、Times系縛りへの対応、 線幅細すぎ、線の色の視認性悪すぎ、などなど不満な点が幾つもあります。 もちろん、MATLABの細かな設定で上記の不満は解消できますが、毎回それをコーディングするのは馬鹿らしいので、 MultiPlotの名でクラス化をして、これを研究室での標準とします。
(今まで使ってきた「TimeSeriesPlot」も不満だらけだったので、今回新たに作成し直しました)

ダウンロード/Download

下記から「MultiPlot」とサンプルコードをDLできます。

プロットの例/Example of Plot

スクリプトの書き方とそれに対応するプロットを下記に記載しておきます。 必要なプロット形態に合わせて、自由に改変して下さい。

サンプルコード/Sample 出力結果/Results
% MultiPlotスクリプトのサンプルコード
% 2024/04/03 Yokokura, Yuki
clc;
clear;

% CSVファイルから読み込み
FileName = 'DATA.csv';          % CSVファイル名設定
import MultiPlot.LoadCsvFile;   % LoadCsvFile関数インポート
[t, x1, x2, x3, x4, x5] = LoadCsvFile(FileName);    % 変数値読み込み

% グラフ時間軸オフセット&スケーリング
%t = t - 0.05;  % 開始時刻のオフセット
%t = t*1e3;     % [s] → [ms] のスケーリング

% グラフ描画
figure(1);
    % MultiPlot全体の設定
    Graph1 = MultiPlot(gcf);            % MultiPlot生成
    Graph1.FigurePosition(55, 55);      % Figure位置の設定(左[px], 下[px])
    Graph1.FigureSize(900, 800);        % Figureサイズの設定(幅[px], 高さ[px])
    Graph1.FigureMargin(130, 70, 20);   % Figure余白の設定(左側[px], 下側[px], 右側[px])
    Graph1.Font('Times New Roman', 18); % フォントの設定(フォント名, フォントサイズ)
    Graph1.NumOfPlanes(4);              % プロット平面の段数
    %Graph1.XaxisRange(-1, 1, 5);       % X軸範囲の設定(最小値, グリッド間隔, 最大値) ←コメントアウトで自動モード
    Graph1.XaxisLabel('Time [s]');      % X軸ラベル名
    % プロット平面1段目
    Graph1.SelectPlane(1);                          % プロット段選択
    Graph1.StairsPlot(t, x1, 'Black', 'Thin');      % 階段プロット
    Graph1.StairsPlot(t, x2, 'Red',   'Normal');    % 線の色は Black/Gray/Red/Green/Blue の5種のみ
    Graph1.StairsPlot(t, x3, 'Green', 'Normal');    % 線の太さは Thin/Normal/Heavy の3種のみ
    Graph1.StairsPlot(t, x4, 'Blue',  'Heavy');     % 重ねられるプロットの数は無制限
    %Graph1.ManualGrid(-2, 0.5, 2);                 % X軸範囲の設定(最小値, グリッド間隔, 最大値) ←コメントアウトで自動モード
    Graph1.Label({'(a)','Var. A','[-]'});           % 縦軸ラベルの設定
    Graph1.Legend({'x_1','x_2','x_3','x_4'}, 'NorthEast', 'Vertical');  % 凡例の設定
    % プロット平面2段目
    Graph1.SelectPlane(2);                          % プロット段選択
    Graph1.StairsPlot(t, x1, 'Gray', 'Normal');     % 階段プロット
    Graph1.LinePlot(t, x2, 'Red', 'Normal');        % 線形プロット
    Graph1.DotPlot(t, x3, 'Blue', 'Heavy');         % 点プロット
    Graph1.CrossPlot(t, x4, 'Black', 'Thin');       % ×プロット
    Graph1.CirclePlot(t, x5, 'Green', 'Thin');      % ○プロット
    Graph1.PlusPlot(t, x1, 'Red', 'Thin');          % +プロット
    Graph1.ManualGrid(-1.5, 0.5, 1.0);              % X軸範囲の設定(最小値, グリッド間隔, 最大値) ←コメントアウトで自動モード
    Graph1.Label({'(b)','Var. B','[-]'});           % 縦軸ラベルの設定
    Graph1.Legend({'x1','x2','x3','x4','x5'}, 'SouthEast', 'Horizontal');   % 凡例の設定
    % プロット平面3段目
    Graph1.SelectPlane(3);                          % プロット段選択
    Graph1.StairsPlot(t, x1, 'Black', 'Heavy', 2);  % データ数を半分にダウンサンプリングして間引いてからプロット
    Graph1.StairsPlot(t, x1, 'Gray', 'Normal', 4);  % データ数を4分の1にダウンサンプリングして間引いてからプロット
    Graph1.StairsPlot(t, x1, 'Red', 'Thin', 8);     % データ数を8分の1にダウンサンプリングして間引いてからプロット
    Graph1.Label({'(c)','Var. C','[-]'});           % 縦軸ラベルの設定
    Graph1.Legend({'1/2','1/4','1/8'}, 'SouthWest', 'Horizontal');  % 凡例の設定
    % プロット平面4段目
    Graph1.SelectPlane(4);                          % プロット段選択
    hold on;
    bar(t, x1, 'b');                                % 通常のMATLABのグラフ関数も併用可能(注: hold on/off が必須)
    hold off;
    ylabel({'(d)','Var. D [-]'});
    Graph1.AutoGrid(gca);
    Graph1.FontSettings(gca);
    % 画像生成
    Graph1.SavePNGandEPS(FileName);     % PNG画像とEPSファイルを生成
    Graph1.SavePNGandPDF(FileName);     % PNG画像とPDFファイルを生成