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

20 ビュー (過去 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 Center および File Exchangeカラーマップ についてさらに検索

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!