ドキュメンテーション

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

グラフィックス オブジェクトの取り扱い

グラフィックス オブジェクト

グラフィックス オブジェクトは、グラフを表示するために用いる基本要素です。次の図に示すように、これらのオブジェクトは階層にまとめられます。

プロット関数を呼び出すと、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)

オブジェクトの利用に関する関数

次の表は、オブジェクトの利用に際して一般的に用いられる関数の一覧です。

関数

目的

allchild

指定したオブジェクトのすべての子オブジェクトを求める。

ancestor

グラフィックス オブジェクトの上位オブジェクトを求める。

copyobj

グラフィックス オブジェクトをコピーする。

delete

オブジェクトの削除。

findall

すべてのグラフィックス オブジェクトの検索 (非表示のハンドルを含む)。

findobj

指定したプロパティ値をもつオブジェクトのハンドルの検索。

gca

現在の座標のハンドル番号を出力。

gcf

現在の Figure のハンドル番号を出力。

gco

現在のオブジェクトのハンドル番号を出力。

get

オブジェクトのプロパティ値の取得。

ishandle

有効なオブジェクト ハンドル番号の検出。

set

オブジェクトのプロパティ値の設定。

引数の受け渡し

特殊なプロット関数を定義するとカスタマイズ グラフの作成を単純化できます。関数を定義すると、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 を検索します。