極座標3次元プロットでのカラーマップ指定方法

조회 수: 19 (최근 30일)
H.O
H.O 2021년 7월 9일
댓글: H.O 2021년 7월 10일
極座標の散布図を作成し、Z方向の値をカラーレンジでプロットしたいです。プロットはできましたが、カラーマップがデフォルトで固定されており、jetに変更できませんでした。修正方法を教えてください。
clear
z1=[1 2 3 4 5 6] %カラーにしたい値を定義
theta=deg2rad(60); %ラジアンに変換、60度間隔にプロットする theta_end=2*pi-deg2rad(theta); %最後のプロット点を定義
% %散布図 半径2で定義 T=0:theta:theta_end; %0度からスタートして 等間隔に1周する
polarscatter(T,2,z1,'filled','SizeData',180,'MarkerEdgeColor','k','MarkerFaceColor','flat');
% カラー範囲
caxis([1 10]) colormap(jet); %カラーマップ変更 colorbar
  댓글 수: 1
Atsushi Ueno
Atsushi Ueno 2021년 7월 9일
편집: Atsushi Ueno 2021년 7월 9일
CDataにカラーマップの値を設定すれば良いのですが、どうすれば良いのか分からないので調べます...
⇒原因がわかったのでコメントを削除しました

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

채택된 답변

Atsushi Ueno
Atsushi Ueno 2021년 7월 9일
@H.Oさんの意図した通りに動作しない原因が判りました
polarscatter(th,r,sz) はマーカーのサイズを設定します。
polarscatter(th,r,sz,c) はマーカーの色を設定します。
色を指定する為には4つのパラメータが必要ですが、色を指定するのにパラメータを3つしか入力していないのが原因です。3つしか入力しない引数のパターンも認識するので「マーカの色」のつもりで入力したパラメータが「マーカーのサイズ」と認識されてしまいエラーにはなりません。分かり易いようにマーカーの数を増やしました。
r = ones(1,12).*2; %rho値を定義
s = ones(1,12).*200; %マーカのサイズを定義
z1 = 1:12; %カラーにしたい値を定義
theta = deg2rad(30); %ラジアンに変換、60度間隔にプロットする
theta_end = 2*pi-deg2rad(theta); %最後のプロット点を定義
T = 0:theta:theta_end; %0度からスタートして 等間隔に1周する
% polarscatter(T,2 ,z1,'filled','SizeData',180,'MarkerEdgeColor','k','MarkerFaceColor','flat');
mp = polarscatter(T,r,s,z1,'filled','SizeData',180,'MarkerEdgeColor','k','MarkerFaceColor','flat');%散布図 半径2で定義
caxis([1 10]);
colormap(jet); %カラーマップ変更
colorbar;
  댓글 수: 2
Atsushi Ueno
Atsushi Ueno 2021년 7월 9일
もう一つ「色cの行列の長さは角度 th および半径 r の長さと同じでなければならない」との記載があります。半径rは全部同じ2だからスカラ値を入力していましたがこれを角度thと同じ長さのベクトルに変更しました。元のスカラに戻すとエラーになりました。
引数3つ(th,r,sz)の場合も、szは th および r と同じ長さでなければならないはずなのに、なぜrをスカラ値で入力してもエラーにならないのかは謎です。MATLABむずかしい
H.O
H.O 2021년 7월 10일
原因のご指摘まで頂きありがとうございます。 私の方でも動作確認できました。 ありがとうございました。

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

추가 답변 (1개)

Hernia Baby
Hernia Baby 2021년 7월 9일
편집: Hernia Baby 2021년 7월 9일
polarscatterの場合、それぞれに(R,G,B)の値を適用する必要があります。
clc,clear,close;
z1 = [1 2 3 4 5 6]; %カラーにしたい値を定義
theta = deg2rad(60); %ラジアンに変換、60度間隔にプロットする
theta_end = 2*pi-deg2rad(theta); %最後のプロット点を定義
T = 0:theta:theta_end; %0度からスタートして 等間隔に1周する
ここがミソです
NoCol = ceil(max(z1)); %色の数
CM = colormap(jet(NoCol)); %カラーマップの指定
プロットします。
mp = polarscatter(T,2,180,CM(fix(z1),:),'filled');%散布図 半径2で定義
% カラー範囲
caxis([min(z1) max(z1)])
color = colormap(jet);
%カラーマップ変更
colorbar
  댓글 수: 3
Hernia Baby
Hernia Baby 2021년 7월 9일
편집: Hernia Baby 2021년 7월 9일
自分は配列のサイズを一緒にすればいいということに気づきませんでした。
確かにプロットするときはそういう指定しますもんね。こちらの方がなめらかです。
clc,clear,close;
z1 = [1 2 3 4 5 6]; %カラーにしたい値を定義
theta = deg2rad(60); %ラジアンに変換、60度間隔にプロットする
theta_end = 2*pi-deg2rad(theta); %最後のプロット点を定義
T = 0:theta:theta_end; %0度からスタートして 等間隔に1周する
mp = polarscatter(T,ones(1,length(z1))*2,ones(1,length(z1))*180,z1,'filled');%散布図 半径2で定義
% カラー範囲
caxis([0 7])
color = colormap(jet);
%カラーマップ変更
colorbar
H.O
H.O 2021년 7월 10일
カラーマップをMIN、MAXで作ることもできるのですね。私の方でも動作確認できました。 ありがとうございました。

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

카테고리

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

제품


릴리스

R2021a

Community Treasure Hunt

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

Start Hunting!