patchの色付け

4 views (last 30 days)
知真 梶山
知真 梶山 on 16 Sep 2021
Edited: Atsushi Ueno on 18 Sep 2021
散布データに基づいて図のようなpatchを作製しました。
それぞれの三角パッチの面積の値から色分けをして、パッチの色付けを行いたいです。
(例. 面積が1~3の場合は青、3~5の場合は緑、5~7の場合は赤 など)
それぞれの三角パッチの面積は計算できているのですが、patchの色指定の段階で面積データとどのように紐付ければ良いかわかりません。

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 18 Sep 2021
Edited: Atsushi Ueno on 18 Sep 2021
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'; % パッチの面毎に一様な色で塗りつぶし
  1 Comment
Atsushi Ueno
Atsushi Ueno on 18 Sep 2021
>それぞれの三角パッチの面積の値から色分けをして、パッチの色付けを行いたいです。
>(例. 面積が1~3の場合は青、3~5の場合は緑、5~7の場合は赤 など)
⇒面積の最大値と最小値を3つに分けて、閾値2か所を超えたか超えないかで面積値を1,2,3に変換してパッチの色に割り当てれば3段階に色付けできます。
% 前半の面積を求める所までは省略
mxar = max(area); mnar = min(area); thrs = (mxar - mnar) / 3;
m1st = mnar + thrs; m2nd = mnar + thrs + thrs;
p.CData = 1 + (area > m1st) + (area > m2nd);
p.FaceColor = 'flat';

Sign in to comment.

More Answers (0)

Products


Release

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!