- FaceColor = [0 0 0] (既定値) ⇒'flat':規定値は全パッチの色を統一するので'flat'に変更します
- CData = [](最初は空)⇒[面積を色情報に変換したデータ](長さ=パッチ数のベクトル)
- CDataMapping = 'scaled' (既定値)のまま(面積の値を色の値に自動換算させる)
patchの色付け
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
散布データに基づいて図のようなpatchを作製しました。
それぞれの三角パッチの面積の値から色分けをして、パッチの色付けを行いたいです。
(例. 面積が1~3の場合は青、3~5の場合は緑、5~7の場合は赤 など)
それぞれの三角パッチの面積は計算できているのですが、patchの色指定の段階で面積データとどのように紐付ければ良いかわかりません。
0 commentaires
Réponse acceptée
Atsushi Ueno
le 18 Sep 2021
Modifié(e) : Atsushi Ueno
le 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つのプロパティを下記の様に設定変更しました
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 commentaire
Atsushi Ueno
le 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';
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur 多角形 dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!