極座標系でのヒートマップの使用方法について

41 views (last 30 days)
soga
soga on 29 Nov 2024
Commented: soga on 17 Dec 2024
極座標系でのデータの観測回数を可視化するヒートマップを作成したいと考えています。
具体的には、半径0~6を1ずつ分割し、角度0~360°を30°ずつ区切ったエリアごとにデータの観測回数をカウントし、それをヒートマップとして表示したいです。
試したこととして、デカルト座標系への変換を行いヒートマップの作成には成功しましたが、その結果を極座標系に再変換して表示する方法がうまくいきませんでした。
fillsurfなどが極座標系で動作しないことも課題となっています。
この場合、極座標系で直接ヒートマップを作成する方法や、適切に再変換する方法についてアドバイスをいただけると助かります。
% 極座標プロット
figure;
polaraxes;
hold on
colormap(jet)
cb=colorbar;
A = scatter(0,0,1700,'black');
Z = linspace(0-1i,0+1i);
polarplot(Z,'black');
% グラフの調整
ax = gca;
ax.ThetaDir = 'counterclockwise'; % 時計回り
ax.ThetaZeroLocation = 'right'; % 東(右側)を0 MLTに設定
ax.ThetaTick = (0:2:24) * 15; % 1時間刻み
ax.ThetaTickLabel = ({'0時','2時','4時','6時','8時','10時','12時','14時','16時','18時','20時','22時'}); % MLTラベル設定
ax.RLim = [0, 6]; % 半径範囲を設定
ax.RTick = (0:1:6);
ax.RTickLabel = ({'','0RE','1','2','3','4','5'}); % 単位付きRE

Answers (1)

Kojiro Saito
Kojiro Saito on 10 Dec 2024
Edited: Kojiro Saito on 10 Dec 2024
ヒートマップを描くheatmap関数が極座標に対応していないので、polarhistogramや、R2024aで導入されたpolarregionなどで描く方法になるかと思います。
polarregionでヒートマップ風のプロットのサンプルは以下のとおりです。とりあえずcountsという変数に観測回数のダミーデータを入れ、値に応じてFaceColorで色をカラーマップjetの該当番号に塗りつぶすようにしています。
figure;
pa = polaraxes;
hold on
cm = colormap(jet);
cb=colorbar(Ticks=0:16:256, TickLabels=0:16:256);
clim([1 256])
A = scatter(0,0,1700,'black');
Z = linspace(0-5i,0+5i);
polarplot(Z,'black');
counts = randi(256, 5, 12);
thetas = linspace(0, 2*pi, 13);
radii = 0:5;
for n = 1:length(thetas)-1
for m = 1:length(radii)-1
pr = polarregion([thetas(n) thetas(n+1)], [radii(m) radii(m+1)], FaceColor=cm(counts(m, n), :));
end
end
hold off
  1 Comment
soga
soga on 17 Dec 2024
本当に助かりました、回答ありがとうございます。

Sign in to comment.

Categories

Find more on ビッグ データの処理 in Help Center and File Exchange

Products


Release

R2024b

Community Treasure Hunt

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

Start Hunting!