patchの色付け

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

채택된 답변

Atsushi Ueno
Atsushi Ueno 2021년 9월 18일
편집: Atsushi Ueno 2021년 9월 18일
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
Atsushi Ueno
Atsushi Ueno 2021년 9월 18일
>それぞれの三角パッチの面積の値から色分けをして、パッチの色付けを行いたいです。
>(例. 面積が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';

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 カラーマップ에 대해 자세히 알아보기

제품


릴리스

R2021a

Community Treasure Hunt

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

Start Hunting!