グラフィックス オブジェクトの取り扱い
グラフィックス オブジェクト
グラフィックス オブジェクトは、グラフを表示するために用いる基本要素です。次の図に示すように、これらのオブジェクトは階層にまとめられます。
プロット関数を呼び出すと、MATLAB® は Figure ウィンドウ、座標軸、ライン、テキストなどのさまざまなグラフィックス オブジェクトを使用してグラフを作成します。それぞれのオブジェクトには既定の一連のプロパティがあり、それを使用してグラフの動作と外観を管理できます。
たとえば、次のステートメントは変数 y のデータから棒グラフを作成して、バーの外観のプロパティを設定します。
y = [75 91 105 123.5 131 150 179 203 226 249 281.5]; bar(y,'FaceColor','green','EdgeColor','black','LineWidth',1.5)
よく使用されるグラフィックス オブジェクト
MATLAB では、関数を呼び出してグラフを作成するときにグラフィックス オブジェクトの階層が作成されます。たとえば、関数 plot
を呼び出すと、以下のグラフィックス オブジェクトが作成されます。
Figure — 座標軸、ツール バー、メニューなどを含むウィンドウ
Axes — データを表すオブジェクトを含む座標系
Line — 関数
plot
に渡されるデータ値を表すラインText — 軸目盛りのラベル、およびオプションのタイトルと注釈
グラフのタイプによりデータを表すオブジェクトは異なります。グラフにはさまざまな種類があるのでデータ オブジェクトも多種多様です。ラインや四角形などの汎用オブジェクトから、エラー バー、カラー バー、凡例といった高度に特化したものまでさまざまです。
オブジェクト プロパティへのアクセス
プロット関数はグラフの作成に使用するオブジェクトを返すことができます。たとえば、次のステートメントはグラフを作成して、関数 plot
で作成された line オブジェクトを返します。
x = 1:10; y = x.^3; h = plot(x,y);
h
を使用して line オブジェクトのプロパティを設定します。たとえば、Color
プロパティを設定します。
h.Color = 'red';
プロット関数を呼び出すときにも line プロパティを指定できます。
h = plot(x,y,'Color','red');
次のように line プロパティをクエリして、現在の値を確認することができます。
h.LineWidth
ans = 0.5000
オブジェクトのプロパティの検出
オブジェクトのプロパティを表示するには、次のように入力します。
get(h)
MATLAB は、オブジェクトのプロパティと現在の値のリストを返します。
オブジェクトのプロパティと設定可能な値に関する情報を表示するには、次のように入力します。
set(h)
オブジェクト プロパティの設定
一度に複数のプロパティを設定するには、関数 set
を使用します。
既存のオブジェクトのプロパティを設定
複数のオブジェクトで同じプロパティを同じ値に設定するには、関数 set
を使用します。
たとえば、次のステートメントは、5 行 5 列の行列をプロットし (列ごとに 1 つずつ合計 5 つの line オブジェクトを作成)、Marker
プロパティを四角に、MarkerFaceColor
プロパティを緑に設定します。
y = magic(5); h = plot(y); set(h,'Marker','s','MarkerFaceColor','g')
この場合、h
は 5 つのハンドルを含むベクトルで、各ハンドルはグラフ内の 5 つのラインの各々です。set
ステートメントは、すべてのラインの Marker
および MarkerFaceColor
プロパティを同じ値に設定します。
1 つのオブジェクトにプロパティ値を設定するには、ハンドル配列にインデックスを付けます。
h(1).LineWidth = 2;
複数のプロパティ値の設定
各ラインのプロパティを違う値に設定する場合は、cell 配列を使ってすべてのデータを保存し、set
コマンドに渡すことができます。たとえば、プロットを作成してラインのハンドル番号を保存します。
figure y = magic(5); h = plot(y);
各ラインに別々のマーカーを追加し、マーカーの面の色をラインと同じ色にするものとします。2 つの cell 配列を定義しなければなりません。1 つはプロパティ名を含み、もう 1 つはプロパティの希望する値を含みます。
cell 配列 prop_name
には、2 要素が含まれます。
prop_name(1) = {'Marker'}; prop_name(2) = {'MarkerFaceColor'};
cell 配列 prop_values
は、10 個の値を含みます。Marker
プロパティに対する値が 5 個で、MarkerFaceColor
プロパティに対する値が 5 個です。prop_values
は、2 次元 cell 配列であることに注意してください。1 次元目は、値が適用される h
のハンドル番号を示し、2 次元目は、値が割り当てられるプロパティを示します。
prop_values(1,1) = {'s'}; prop_values(1,2) = {h(1).Color}; prop_values(2,1) = {'d'}; prop_values(2,2) = {h(2).Color}; prop_values(3,1) = {'o'}; prop_values(3,2) = {h(3).Color}; prop_values(4,1) = {'p'}; prop_values(4,2) = {h(4).Color}; prop_values(5,1) = {'h'}; prop_values(5,2) = {h(5).Color};
MarkerFaceColor
には常に、対応するラインの色 (ラインの Color
プロパティを取得することにより取得) の値が代入されます。
cell 配列を定義した後で、set
を呼び出して新規のプロパティ値を指定します。
set(h,prop_name,prop_values)
オブジェクトの利用に関する関数
次の表は、オブジェクトの利用に際して一般的に用いられる関数の一覧です。
関数 | 目的 |
---|---|
指定したオブジェクトのすべての子オブジェクトを求める。 | |
グラフィックス オブジェクトの上位オブジェクトを求める。 | |
グラフィックス オブジェクトをコピーする。 | |
オブジェクトの削除。 | |
すべてのグラフィックス オブジェクトの検索 (非表示のハンドルを含む)。 | |
指定したプロパティ値をもつオブジェクトのハンドルの検索。 | |
現在の座標のハンドル番号を出力。 | |
現在の Figure のハンドル番号を出力。 | |
現在のオブジェクトのハンドル番号を出力。 | |
オブジェクトのプロパティ値の取得。 | |
有効なオブジェクト ハンドル番号の検出。 | |
オブジェクトのプロパティ値の設定。 |
引数の受け渡し
特殊なプロット関数を定義するとカスタマイズ グラフの作成を単純化できます。関数を定義すると、MATLAB プロット関数などの引数を渡すことができます。
次の例は、入力引数 x
で指定された範囲で数式を評価して、結果をプロットする MATLAB 関数です。plot
関数の 2 回目の呼び出しで、結果の mean
の値が赤の線でプロットされます。
関数は、計算した値に基づいて y 軸の目盛りを変更します。軸ラベルとタイトルを付けてカスタム グラフを完成させます。
function plotFunc(x) y = 1.5*cos(x) + 6*exp(-.1*x) + exp(.07*x).*sin(3*x); ym = mean(y); hfig = figure('Name','Function and Mean'); hax = axes('Parent',hfig); plot(hax,x,y) hold on plot(hax,[min(x) max(x)],[ym ym],'Color','red') hold off ylab = hax.YTick; new_ylab = sort([ylab, ym]); hax.YTick = new_ylab; title ('y = 1.5cos(x) + 6e^{-0.1x} + e^{0.07x}sin(3x)') xlabel('X Axis') ylabel('Y Axis') end
入力引数の値を定義して関数を呼び出します。
x = -10:.005:40; plotFunc(x)
既存のオブジェクトのハンドル番号の検索
関数 findobj
を使って、特定のプロパティ値をもつオブジェクトを検索することにより、グラフィックス オブジェクトのハンドル番号を取得することができます。findobj
によって、プロパティの値を任意に組み合わせて指定できるため、多くのオブジェクトから簡単に 1 つを選ぶことができます。findobj
は正規表現も認識します。
特定のタイプのすべてのオブジェクトの検索
すべてのオブジェクトはオブジェクト型を識別する Type
プロパティをもつため、特定の型のすべてのオブジェクトのハンドルを検索できます。たとえば、
h = findobj('Type','patch');
は、すべての patch オブジェクトのハンドルを検索します。
特定のプロパティをもつオブジェクトの検索
検索範囲を狭めるために複数のプロパティを指定することができます。たとえば、
plot(rand(5),'r:') h = findobj('Type','line','Color','r','LineStyle',':');
は、赤い点線のすべてハンドル番号を検索します。
h = 5x1 Line array: Line Line Line Line Line
検索範囲の制限
検索を開始する Figure または座標のハンドル番号を引数として渡すことにより、オブジェクト階層内での検索開始点を指定することができます。たとえば、
h = findobj(gca,'Type','text','String','\pi/2');
は、現在の座標軸内のみで π/2 を検索します。