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

18 Ansichten (letzte 30 Tage)
H.O
H.O am 9 Jul. 2021
Kommentiert: H.O am 10 Jul. 2021
極座標の散布図を作成し、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 Kommentar
Atsushi Ueno
Atsushi Ueno am 9 Jul. 2021
Bearbeitet: Atsushi Ueno am 9 Jul. 2021
CDataにカラーマップの値を設定すれば良いのですが、どうすれば良いのか分からないので調べます...
⇒原因がわかったのでコメントを削除しました

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Atsushi Ueno
Atsushi Ueno am 9 Jul. 2021
@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 Kommentare
Atsushi Ueno
Atsushi Ueno am 9 Jul. 2021
もう一つ「色cの行列の長さは角度 th および半径 r の長さと同じでなければならない」との記載があります。半径rは全部同じ2だからスカラ値を入力していましたがこれを角度thと同じ長さのベクトルに変更しました。元のスカラに戻すとエラーになりました。
引数3つ(th,r,sz)の場合も、szは th および r と同じ長さでなければならないはずなのに、なぜrをスカラ値で入力してもエラーにならないのかは謎です。MATLABむずかしい
H.O
H.O am 10 Jul. 2021
原因のご指摘まで頂きありがとうございます。 私の方でも動作確認できました。 ありがとうございました。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Hernia Baby
Hernia Baby am 9 Jul. 2021
Bearbeitet: Hernia Baby am 9 Jul. 2021
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 Kommentare
Hernia Baby
Hernia Baby am 9 Jul. 2021
Bearbeitet: Hernia Baby am 9 Jul. 2021
自分は配列のサイズを一緒にすればいいということに気づきませんでした。
確かにプロットするときはそういう指定しますもんね。こちらの方がなめらかです。
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 am 10 Jul. 2021
カラーマップをMIN、MAXで作ることもできるのですね。私の方でも動作確認できました。 ありがとうございました。

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu カラーマップ finden Sie in Help Center und File Exchange

Produkte


Version

R2021a

Community Treasure Hunt

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

Start Hunting!