質問: patchの色付け 散布データに基づいて図のようなpatchを作製しました。 それぞれの三角パッチの面積の値から色分けをして、パッチの色付けを行いたいです。 (例. 面積が1~3の場合は青、3~5の場合は緑、5~7の場合は赤 など) それぞれの三角パッチの面積は計算できているのですが、patchの色指定の段階で面積データとどのように紐付ければ良いかわかりません。
回答: is there a matlab function that can compute the area of my patch? - matlab answers - matlab central (mathworks.com):上記回答(及び下記事例)の様に面積を計算しているのであれば、パッチの添え字と計算した面積の添え字が一致します。面積を加工して色の情報にすればパッチの色として設定可能です。 パッチの外観と動作 - matlab - mathworks 日本:最初に出てくる「色」に関する5つのプロパティを熟読すれば、自由に面積に応じた色を設定できます。下記事例では、パッチの色を設定する2つのプロパティを下記の様に設定変更しました facecolor = [0 0 0] (既定値) ⇒'flat':規定値は全パッチの色を統一するので'flat'に変更します cdata = ⇒面積を色情報に変換したデータ cdatamapping = 'scaled' (既定値)のまま(面積の値を色の値に自動換算させる) f = open('patchfigure.fig'); p = f.children.children(2); % figureオブジェクト内のpatchオブジェクト a = p.vertices(p.faces(:, 2), :) - p.vertices(p.faces(:, 1), :); % 各三角パッチの辺a (点2-点1) b = p.vertices(p.faces(:, 3), :) - p.vertices(p.faces(:, 1), :); % 各三角パッチの辺b (点3-点1) area = 1/2 * sqrt(sum(cross(a, b, 2).^2, 2)); % 三角パッチの二辺の外積ベクトルの長さ/2 (三角形の面積) % p.cdata = area; % パッチのカラーデータに面積値を設定(現在の色スケールの最大/小値に自動スケーリングされる) p.cdata = 1 + (area > max(area) * 1 / 3 + min(area) * 2 / 3) + (area > max(area) * 2 / 3 + min(area) * 1 / 3); p.facecolor = 'flat'; % パッチの面毎に一様な色で塗りつぶし