- FaceColor = [0 0 0] (既定値) ⇒'flat':規定値は全パッチの色を統一するので'flat'に変更します
- CData = [](最初は空)⇒[面積を色情報に変換したデータ](長さ=パッチ数のベクトル)
- CDataMapping = 'scaled' (既定値)のまま(面積の値を色の値に自動換算させる)
patchの色付け
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
知真 梶山
el 16 de Sept. de 2021
Editada: Atsushi Ueno
el 18 de Sept. de 2021
散布データに基づいて図のようなpatchを作製しました。
それぞれの三角パッチの面積の値から色分けをして、パッチの色付けを行いたいです。
(例. 面積が1~3の場合は青、3~5の場合は緑、5~7の場合は赤 など)
それぞれの三角パッチの面積は計算できているのですが、patchの色指定の段階で面積データとどのように紐付ければ良いかわかりません。
0 comentarios
Respuesta aceptada
Atsushi Ueno
el 18 de Sept. de 2021
Editada: Atsushi Ueno
el 18 de Sept. de 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 comentario
Atsushi Ueno
el 18 de Sept. de 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';
Más respuestas (0)
Ver también
Categorías
Más información sobre 多角形 en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!