ヒートマップの配列の並び替え

23 views (last 30 days)
Kato Yusuke
Kato Yusuke on 14 Aug 2021
Commented: Kato Yusuke on 15 Aug 2021
heatmap関数を用いて,2変数関数z = x^2 + y^2のヒートマップを2次元平面上に構成したいのですが,
[X,Y] = meshgrid(1:1:100);
Z =X.^2 + Y.^2;
heatmap(Z)
とすると,
のように,y軸の値が上から下の順に1,2,..., 100と並んでしまいます.
xy座標軸のように,y軸が下から1,2,...,100と並ぶように並べ替えたいのですが,やり方がわかりません.
またx,yラベルの表示ももう少し簡潔に(全ての数字ではなく1,20,40,60,80,100のみが出るように)直したいのですが,どのようにすればよいのでしょうか.

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 14 Aug 2021
Edited: Atsushi Ueno on 14 Aug 2021
xy座標軸のように,y軸が下から1,2,...,100と並ぶように並べ替えたい
(解説1) plotの場合'YDir'プロパティを’Reverse’に設定出来ますが、heatmapには同プロパティがありません
(解説2) h.YDisplayData = flipud(h.YDisplayData); % 左記方法でやりたい事が実現します
x,yラベルの表示ももう少し簡潔に(全ての数字ではなく1,20,40,60,80,100のみが出るように)直したい
(解説1) plotと違いheatmapのtickラベルは「全要素に対し文字列で定義」し、間引いて表示する事は出来ません
(解説2) 表示したくないtickラベルを空白にすれば透明な文字で表示される為、やりたい事が実現します
[X,Y] = meshgrid(1:1:100);
Z =X.^2 + Y.^2;
hm = heatmap(Z);
% y軸が下から順に並ぶように並べ替え
hm.YDisplayData = flipud(hm.YDisplayData);
% x,y-tickラベルの表示を簡潔に直す
CustomXLabels = string(X(1,:)); % Xの値からx-tickラベルに設定する文字列を作成
CustomYLabels = string(Y(:,1));
CustomXLabels(X(1,:) ~= 1 & mod(X(1,:),20) ~= 0) = " "; % 表示したくないtickラベルを空白にする
CustomYLabels(Y(:,1) ~= 1 & mod(Y(:,1),20) ~= 0) = " ";
hm.XDisplayLabels = CustomXLabels; % x-tickラベルの表示を簡潔に直す
hm.YDisplayLabels = CustomYLabels; % y-tickラベルの表示を簡潔に直す
  1 Comment
Kato Yusuke
Kato Yusuke on 14 Aug 2021
どうもありがとうございます!ご指摘の通り,plotの時と同様の操作では解決できなかったのですが,教えていただいた方法で望んでいた図が描けました.
本当にどうもありがとうございましたm(_ _)m

Sign in to comment.

More Answers (1)

Shunichi Kusano
Shunichi Kusano on 15 Aug 2021
解決済みのところ失礼いたします。
画像化だけであれば、imagesc関数使ってしまってもいいかと思いました。
[X,Y] = meshgrid(1:1:100);
Z =X.^2 + Y.^2;
imagesc(1:100,1:100,Z);
colormap hot;
colorbar;
axis xy;
daspect([1 1 1]);
  1 Comment
Kato Yusuke
Kato Yusuke on 15 Aug 2021
わざわざありがとうございます!imagesc関数は知らなかったのですが,確かにこちらでも欲しかった図が得られました.

Sign in to comment.

Products

Community Treasure Hunt

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

Start Hunting!