Main Content

プロパティ値へのアクセス

オブジェクト プロパティとドット表記

グラフ化関数は、自身が作成した 1 つ以上のオブジェクトを返します。以下に例を示します。

h = plot(1:10);

h は 1 ~ 10 の値からなるグラフに描画されるラインを参照します。

"ドット表記" 構文は、オブジェクト変数とプロパティ名 (大文字小文字は区別される) をドット (.) でつなげて、"オブジェクト.プロパティ名" の表記を構成します。

object.PropertyName

オブジェクト変数が非スカラーの場合は、インデックスを使用して単一のオブジェクトを参照します。

object(n).PropertyName

スカラー オブジェクト変数

h が関数 plot によって作成されたラインの場合、式 h.Color はそのラインの Color プロパティの値になります。

h.Color
ans =

         0    0.4470    0.7410

この Color の値を変数に代入する場合を考えます。

c = h.Color;

変数 c は double 型になります。

whos
  Name      Size            Bytes  Class  

  c         1x3                24  double   
  h         1x1               112  matlab.graphics.chart.primitive.Line 

このラインの Color プロパティの値を変更するには、代入ステートメントを使用します。

h.Color = [0 0 1];

ドット表記のプロパティ参照は式の中で使用します。

meanY = mean(h.YData);

または、プロパティ値を変更するために使用します。

h.LineWidth = h.LineWidth + 0.5;

複数のドットによる参照を使用して、プロパティに含まれる他のオブジェクトを参照します。

h.Annotation.LegendInformation.IconDisplayStyle
ans =

on

プロパティに含まれるオブジェクトのプロパティを設定します。

ax = gca;
ax.Title.FontWeight = 'normal';

非スカラー オブジェクト変数

グラフィックス関数はオブジェクトの配列を返すことができます。以下に例を示します。

y = rand(5);
h = plot(y);
size(h)
ans =

     5     1

配列のインデックスを使用して、y の最初の列を表すラインにアクセスします。

h(1).LineStyle = '--';

配列内の全ラインの LineStyle を設定するには、関数 set を使用します。

set(h,'LineStyle','--')

プロパティ値へのデータの追加

ドット表記では、"end" インデックスを使用して、XDataYData などのデータ配列を含むプロパティにデータを追加できます。たとえば、次のコードはラインの XDataYData を一緒に更新して、ラインを伸ばします。drawnow を呼び出してレンダリングを行ったり、MATLAB® プロンプトに戻ったりする前に、ラインの x データと y データが同じであることを確認しておかなければなりません。

h = plot(1:10);
for k = 1:5
   h.XData(end + 1) = h.XData(end) + k;
   h.YData(end + 1) = h.YData(end) + k;
   drawnow
end

ハンドルであるグラフィックス オブジェクト変数

グラフィックス関数によって返されるオブジェクト変数は "ハンドル" です。ハンドルは実際のオブジェクトの参照です。ハンドルであるオブジェクト変数がコピーされたり、そのオブジェクトが削除されたりすると、特定の方法で動作します。

オブジェクト変数のコピー

たとえば、1 本のラインからなるグラフを作成するとします。

h = plot(1:10);

次に、オブジェクト変数を別の変数にコピーし、そのコピー先となったオブジェクト変数にプロパティ値を設定します。

h2 = h;
h2.Color = [1,0,0]

オブジェクト変数 hh2 に代入すると、その変数によって参照されているオブジェクトでなく、ハンドルのコピーが作成されます。変数 h からアクセスされる Color プロパティの値は、変数 h2 からアクセスされるものと同じです。

h.Color
ans =

     1     0     0

h および h2 は、同じオブジェクトを参照します。ハンドル オブジェクト変数をコピーしても、オブジェクトはコピーされません。

オブジェクト変数の削除

同じラインを参照する 2 つのオブジェクト変数がワークスペースに存在します。

whos
  Name      Size            Bytes  Class                
  h         1x1               112  matlab.graphics.chart.primitive.Line
  h2        1x1               112  matlab.graphics.chart.primitive.Line

次に、線グラフが含まれている Figure を閉じます。

close gcf

line オブジェクトが存在しなくなりましたが、ラインを参照していたオブジェクト変数はまだ残っています。

whos
  Name      Size            Bytes  Class                
  h         1x1               112  matlab.graphics.chart.primitive.Line
  h2        1x1               112  matlab.graphics.chart.primitive.Line

ただし、これらのオブジェクト変数は有効ではなくなっています。

h.Color
Invalid or deleted object.
h2.Color = 'blue'
Invalid or deleted object.

無効なオブジェクト変数を削除するには、clear を使用します。

clear h h2

オブジェクト プロパティの一覧表示

オブジェクトに含まれるプロパティを確認するには、関数 get を使用します。

get(h)

MATLAB からはオブジェクト プロパティとその現在値の一覧が返されます。

    AlignVertexCenters: 'off'
            Annotation: [1x1 matlab.graphics.eventdata.Annotation]
          BeingDeleted: 'off'
            BusyAction: 'queue'
         ButtonDownFcn: ''
              Children: []
              Clipping: 'on'
                 Color: [0 0.4470 0.7410]
...
             LineStyle: '-'
             LineWidth: 0.5000
                Marker: 'none'
...

プロパティに使用可能なすべての値を列挙するには、関数 set を使用します。

set(h,'LineStyle')
    '-'
    '--'
    ':'
    '-.'
    'none'

設定可能なすべてのプロパティと各プロパティに使用可能なすべての値を列挙するには、オブジェクト変数を指定して set を使用します。

set(h)

set および get によるプロパティの変更

関数 set および get を使用して、プロパティにアクセスして変更することもできます。

既存のオブジェクトにプロパティ値を設定する基本的な構文は、次のとおりです。

set(object,'PropertyName',NewPropertyValue)

特定のオブジェクト プロパティの現在値をクエリするには、次の形式のステートメントを使用します。

returned_value = get(object,'PropertyName');

プロパティ名は常に文字ベクトルです。一重引用符または文字ベクトルの変数を使用できます。プロパティ値は、特定のプロパティに依存します。

複数のオブジェクト/プロパティの操作

オブジェクト引数が配列の場合、MATLAB では指定した値が識別されたすべてのオブジェクトに設定されます。以下に例を示します。

y = rand(5);
h = plot(y);

すべてのラインを赤に設定します。

set(h,'Color','red')

複数のオブジェクトに同じプロパティを設定するには、構造体または cell 配列を使用してプロパティ名とプロパティ値を指定します。たとえば、座標軸のプロパティを適切に設定して、特定のグラフを表示するように構造体を定義します。

view1.CameraViewAngleMode = 'manual';
view1.DataAspectRatio = [1 1 1];
view1.Projection = 'Perspective';

現在の座標軸にこれらの値を設定するには、次のように入力します。

set(gca,view1)

複数のプロパティのクエリ

プロパティ名の cell 配列を定義し、その cell 配列を使用して、それらのプロパティの値を取得できます。たとえば、座標軸の "カメラ モード" プロパティの値を照会するとします。まず、cell 配列を定義します。

camModes = {'CameraPositionMode','CameraTargetMode',...
'CameraUpVectorMode','CameraViewAngleMode'};

この cell 配列を引数として使用して、これらのプロパティの現在値を取得します。

get(gca,camModes)
ans = 
     'auto' 'auto' 'auto' 'auto'