はじめに - なぜ設定ファイルを作成するのか
グラフ作成時に,「同じようなコードを書いている/コピー&ペーストしている」ということがたびたび起こります.毎回同じグラフを書くわけではないので「別にコード書けばええやん」と思われるかもしれません.
でもきれいなグラフを描きたい.
ドキュメントや色んな人の記事を調べつつ...
だんだん凝りだして...
気づいたら...
ということがよくあります.
グラフに限らず,「素早くある程度の質の出力を得る」テンプレートに当てはめた結果を最初に得て,そこから微調節をして改善して進めていく流れを作れると分析もシミュレーションもスムーズに進めるなと思っています.
(今回はグラフだけなのでそれほど大した話ではないのですが,塵も積もればということで)
こんなグラフがでてきてしまう
文字ちっちゃいね.
色もなんだかよくわからない.
グラフをきれいに出力する関数を誰かが作ったらしいけど,どこにあるんだっけ...?
(ここですね: MATLABでLaTeX論文用の図を整形する)
好みなグラフが表示されるようにしたい
きれいなグラフといえば,R の ggplot2 や Python の seaborn でしょうか.
グレーの背景は色が映えますね.
文字を大きくしつつ,まずはグラフを描いてみましょう.
fig = figure;
h = plot(rand(5,5), 'o', 'MarkerSize', 10);
title('たいとる')
xlabel('x軸のらべる')
ylabel('y軸のらべる')
grid on
# 軸のオブジェクトを取得
ax = fig.Children;
# 軸のプロパティを設定
ax.GridColor = [0 0 0];
ax.Color = [.9 .9 .9];
ax.Title.FontSize = 16;
ax.XLabel.FontSize = 16;
ax.YLabel.FontSize = 16;
ax.FontSize = 16;
# 軸の下にある線のオブジェクトのプロパティ LineWidth を設定
ax.Children(1).LineWidth = 2;
ax.Children(2).LineWidth = 2;
ax.Children(3).LineWidth = 2;
ax.Children(4).LineWidth = 2;
ax.Children(5).LineWidth = 2;
この汚いコードで,こんなグラフが出力されます.
先程から文字サイズなどは改善されていますが,線の太さ LineWidth のところなんて,Children が100個あったら書くだけで大変です.
補足
グラフはグラフィックスオブジェクトのページにあるように階層的なオブジェクトで構成されています.以下の2点がグラフ描画に大きく関わる点です.
- Figure の下に Axes (軸),Axes の下にグラフ内の線や点の情報が含まれている
- Figure, Axes のプロパティを変更することでグラフを変更できる
デフォルト値を設定しよう
毎回プロパティを設定するのは面倒なので,グラフのデフォルト値を設定しておきます.
デフォルト値は MATLAB 起動時に実行される startup.m ファイルに書いておきます.
startup.m が存在するかどうかは
which -all startup.m
で確認できます.なければ適当に作ってパスを通しておきましょう.
パスは Home タブの Environment 内にある パスの設定/Set Path で startup.m ファイルのあるフォルダを追加すればが設定できます.
startup.m ファイルはこんな感じ.
% グリッドの設定
set(0, 'DefaultAxesXGrid', 'on');
set(0, 'DefaultAxesYGrid', 'on');
set(0, 'DefaultAxesZGrid', 'on');
% グラフの軸 (axes) の背景
set(0, 'DefaultAxesColor', [.9 .9 .9]);
% テキスト類のフォントサイズ
set(0, 'DefaultAxesFontSize', 16);
set(0, 'DefaultTextFontSize', 16);
% 線の太さとマーカーサイズ
set(0, 'DefaultLineLineWidth', 2);
set(0, 'DefaultLineMarkerSize', 10);
スタートアップファイルを保存したあと,再起動もお忘れなく.(起動時に実行されるファイルであるため)
デフォルト値を定義しておくことで,グラフ調節に手こずることが減るので,だいぶ時間を短縮できています.
他の言語でも設定ファイル書いておきたいな.