二次元グラフとそれに​対応したカラーバーを​表示させる方法

46 views (last 30 days)
takuyuki hasegawa
takuyuki hasegawa on 20 Jul 2020
Commented: Akira Agata on 30 Jul 2020
二次元グラフをplotする際にカラーバーを表示させたいのですが,調べてもカラーバーを三つめの変数として用いるものだけで,二次元グラフの値をそのままカラーバーとして表す方法を探しております.(下記のように)

Answers (1)

Akira Agata
Akira Agata on 20 Jul 2020
imagesc を使ってデータをヒートマップとして可視化するのはいかがでしょうか?
ご参考までに、簡単な例を作成してみました。
% Sample Data
x = linspace(0,2*pi);
y = 0.01 + sin(x).^2;
% Visualize the data
figure
ax1 = subplot(2,1,1);
semilogy(x,y);
ax2 = subplot(2,1,2);
imagesc(x,1,y)
ax2.ColorScale = 'log';
ax2.YTick = [];
linkaxes([ax1 ax2],'x')
  2 Comments
takuyuki hasegawa
takuyuki hasegawa on 27 Jul 2020
返信ありがとうございます。上を用いて可視化しましたが以下の問題が発生しています.
問題点として元データのx軸も対数であるためそれを表示できない
またy方向に1だけを入れたがx軸の周波数のデータ数が256個がy軸に出ている
それに対応してx方向に色の変化が出るはずがy方向にでていてxとyが逆になっている
よろしくお願いします.
Akira Agata
Akira Agata on 30 Jul 2020
なるほど、x軸も対数にする必要があるのですね。
あいにく imagesc で表示するとx軸の対数化が困難なので、別の方法を試してみました。
下記のように、surf 関数で3次元表示したあと、真上(z軸のプラス側)から見下ろす形にして ColorScaleとYScaleを対数化する方法はいかがでしょうか?
(ついでに、上側のプロットも loglog 関数でプロットするようにしました)
% Sample Data
x = linspace(0.01,2*pi);
y = 0.01 + sin(x).^2;
% Prepare for surf plot
[xGrid, yGrid] = meshgrid(x,[0 1]);
zGrid = [y; y];
% Visualize the data
figure
ax1 = subplot(2,1,1);
loglog(x,y);
ax2 = subplot(2,1,2);
surf(xGrid,yGrid,zGrid,'EdgeColor','none')
view(2)
ax2.XLim = ax1.XLim;
ax2.XScale = 'log';
ax2.YTick = [];
ax2.ColorScale = 'log';
grid off;
box on;

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!