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

조회 수: 23 (최근 30일)
Kato Yusuke
Kato Yusuke 2021년 8월 14일
댓글: Kato Yusuke 2021년 8월 15일
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のみが出るように)直したいのですが,どのようにすればよいのでしょうか.

채택된 답변

Atsushi Ueno
Atsushi Ueno 2021년 8월 14일
편집: Atsushi Ueno 2021년 8월 14일
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
Kato Yusuke
Kato Yusuke 2021년 8월 14일
どうもありがとうございます!ご指摘の通り,plotの時と同様の操作では解決できなかったのですが,教えていただいた方法で望んでいた図が描けました.
本当にどうもありがとうございましたm(_ _)m

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Shunichi Kusano
Shunichi Kusano 2021년 8월 15일
解決済みのところ失礼いたします。
画像化だけであれば、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
Kato Yusuke
Kato Yusuke 2021년 8월 15일
わざわざありがとうございます!imagesc関数は知らなかったのですが,確かにこちらでも欲しかった図が得られました.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 データ分布プロット에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!