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

39 次查看(过去 30 天)
takuyuki hasegawa
takuyuki hasegawa 2020-7-20
二次元グラフをplotする際にカラーバーを表示させたいのですが,調べてもカラーバーを三つめの変数として用いるものだけで,二次元グラフの値をそのままカラーバーとして表す方法を探しております.(下記のように)

回答(1 个)

Akira Agata
Akira Agata 2020-7-20
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 个评论
takuyuki hasegawa
takuyuki hasegawa 2020-7-27
返信ありがとうございます。上を用いて可視化しましたが以下の問題が発生しています.
問題点として元データのx軸も対数であるためそれを表示できない
またy方向に1だけを入れたがx軸の周波数のデータ数が256個がy軸に出ている
それに対応してx方向に色の変化が出るはずがy方向にでていてxとyが逆になっている
よろしくお願いします.
Akira Agata
Akira Agata 2020-7-30
なるほど、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;

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 データ分布プロット 的更多信息

Community Treasure Hunt

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

Start Hunting!