ヒートマップの配列の並び替え
16 views (last 30 days)
Show older comments
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のみが出るように)直したいのですが,どのようにすればよいのでしょうか.
0 Comments
Accepted Answer
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のみが出るように)直したい
(MathWorks公式の類似Q&A) How can I modify the X and Y axis tick labels for a Heatmap chart?
(解説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ラベルの表示を簡潔に直す
More Answers (1)
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]);
See Also
Categories
Find more on データ分布プロット in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!