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

10 visualizzazioni (ultimi 30 giorni)
H.O
H.O il 9 Lug 2021
Commentato: H.O il 10 Lug 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 Commento
Atsushi Ueno
Atsushi Ueno il 9 Lug 2021
Modificato: Atsushi Ueno il 9 Lug 2021
CDataにカラーマップの値を設定すれば良いのですが、どうすれば良いのか分からないので調べます...
⇒原因がわかったのでコメントを削除しました

Accedi per commentare.

Risposta accettata

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

Accedi per commentare.

Più risposte (1)

Hernia Baby
Hernia Baby il 9 Lug 2021
Modificato: Hernia Baby il 9 Lug 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 Commenti
Hernia Baby
Hernia Baby il 9 Lug 2021
Modificato: Hernia Baby il 9 Lug 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 il 10 Lug 2021
カラーマップをMIN、MAXで作ることもできるのですね。私の方でも動作確認できました。 ありがとうございました。

Accedi per commentare.

Prodotti


Release

R2021a

Community Treasure Hunt

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

Start Hunting!