Graphics | ![]() ![]() |
円グラフ
円グラフは、ベクトルまたは行列の各要素が、全要素の和に対してどの程度の割合を占めているのかを表示します。pie
およびpie3
は、2-Dおよび3-Dの円グラフを作成します。
例題 - 円グラフ
3つの製品が総売上高に占める割合を視覚化する、関数pie
を使った例を示します。各列が特定の製品に対する5年間の売上高を表す行列X
を考えます。
X = [19.3 22.1 51.6;
34.2 70.3 82.4;
61.4 82.9 90.8;
50.5 54.9 59.1;
29.4 36.3 47.0];
x = sum(X);
入力引数explode
を使って、最大の割合を示す円を取り出すことができます。この引数は、ゼロおよび非ゼロ値からなるベクトルです。非ゼロ値を使って、グラフから関連する断片を切り離します。
explode = zeros(size(x));
つぎに、最も大きな割合を示す部分を見つけ、対応するexplode
の要素を1
に設定します。
[c,offset] = max(x); explode(offset) = 1;
ベクトルexplode
の要素は[0 0 1]
です。切り離された円グラフを作成するために、つぎのステートメントを使用します。
h = pie(x,explode); colormap summer
グラフのラベル付け
円グラフのラベルは、Textグラフィックスオブジェクトです。テキスト文字列やそれらの位置を変更するには、まずオブジェクトの文字列や範囲を取り出します。プロパティ名を中括弧で囲むと、getによってセル配列が出力されます。これは、複数のオブジェクトで作業を行う場合に重要です。
textObjs = findobj(h,'Type','text'); oldStr = get(textObjs,{'String'}); val = get(textObjs,{'Extent'}); oldExt = cat(1,val{:});
新しい文字列を作成し、それからTextオブジェクトのString
プロパティを新しい文字列に設定します。
Names = {'Product X: ';'Product Y: ';'Product Z: '};
newStr = strcat(Names,oldStr);
set(textObjs,{'String'},newStr)
新たなテキスト文字列と以前のテキスト文字列の幅の違いを求め、Position
プロパティの値を変更します。
val1 = get(textObjs, {'Extent'});
newExt = cat(1, val1{:});
offset = sign(oldExt(:,1)).*(newExt(:,3)-oldExt(:,3))/2;
pos = get(textObjs, {'Position'});
textPos = cat(1, pos{:});
textPos(:,1) = textPos(:,1)+offset;
set(textObjs,{'Position'},num2cell(textPos,[3,2]))
![]() | 面積グラフを使ったデータ集合の比較 | 一部を欠いた円グラフ | ![]() |