プロパティ値へのアクセス
オブジェクト プロパティとドット表記
グラフ化関数は、自身が作成した 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" インデックスを使用して、XData
や YData
などのデータ配列を含むプロパティにデータを追加できます。たとえば、次のコードはラインの XData
と YData
を一緒に更新して、ラインを伸ばします。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]
オブジェクト変数 h
を h2
に代入すると、その変数によって参照されているオブジェクトでなく、ハンドルのコピーが作成されます。変数 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'