web-dev-qa-db-ja.com

Matlab / Octaveでカラーマップ/ヒートマップを作成する

MatlabのようなOctave3.8.1を使用していて、次のようなカラーマップ/ヒートマップを作成しようとしています。

Map

配列a1があります。ここで、1番目の列はx、2番目の列はy、3番目の列は強度です。 plot(x、y)を使用して2Dプロットをプロットできることはわかっていますが、プロットに強度(3番目の列)を追加/表示するにはどうすればよいですか。

a1=
[225.512    2.64537 0.00201692
225.512 2.64537 0.00201692
226.94  1.59575 0.00225557
226.94  1.59575 0.00225557
227.31  1.70513 0.002282
227.31  1.70513 0.002282
227.729 5.34308 0.00205535
227.729 5.34308 0.00205535
227.975 5.12741 0.001822
227.975 5.12741 0.001822]

完全なデータセットはここにあります https://www.dropbox.com/s/mmhpbelnjoondho/full.csv

これは単なるサンプルデータであることに注意してください。

6
Rick T
a1=
[225.512 2.64537 0.00201692
225.512  2.64537 0.00201692
226.94   1.59575 0.00225557
226.94   1.59575 0.00225557
227.31   1.70513 0.002282
227.31   1.70513 0.002282
227.729  5.34308 0.00205535
227.729  5.34308 0.00205535
227.975  5.12741 0.001822
227.975  5.12741 0.001822]

ヒートマップをプロットするには、強度データを画像(つまり、2Dマトリックス)としてプロットする必要があります。次に、imagescまたはimshowを使用してプロットできます。

これを行うには、最初にx値の2D行列(X)と、対応するy値の2D行列(Y)を取得して、グリッドを補間できるようにする必要があります。 z値の(Z)。

x = a1(:,1);
y = a1(:,2)
z = a1(:,3)
n = 256;
[X, Y] = meshgrid(linspace(min(x),max(x),n), linspace(min(y),max(y),n));
Z = griddata(x,y,z,X,Y);
%// Remove the NaNs for imshow:
Z(isnan(Z)) = 0;
imshow(Z)

Z0(またはこのデータの場合はゼロ以外の最小値をゼロに等しくする)から1の範囲に正規化して、コントラストを向上させることができます。 :

m = min(Z(Z~=0));
M = max(Z(Z~=0));
imshow((Z-m)/(M-m));
7
Dan