2つの変数を持つデータを2D形式で表現したい。値は色で表され、2つの変数が2つの軸として表されます。データをプロットするために関数contourfを使用しています。
clc; clear;
load('dataM.mat')
cMap=jet(256); %set the colomap using the "jet" scale
F2=figure(1);
[c,h]=contourf(xrow,ycol,BDmatrix,50);
set(h, 'edgecolor','none');
xlim([0.0352 0.3872]);
ylim([0.0352 0.3872]);
colormap(cMap);
cb=colorbar;
caxis([0.7 0.96]);
% box on;
hold on;
Xrowとycolはどちらも、座標を表す6x6行列です。 BDmatrixは、対応するデータを表す6x6マトリックスです。しかし、私が得るのはこれです:
以下は、xrowとyrowのマティックスです。
以下は、BDmatrix maticesです。
データポイントを結ぶ直線として表示されるのではなく、輪郭の色が滑らかに変化することは可能ですか?この図の問題は、魅力的でない粗い粒度です。私はcontourfをimagecで置き換えようとしましたが、機能していないようです。私はMATLAB R2015bを使用しています。
データを補間できます。
newpoints = 100;
[xq,yq] = meshgrid(...
linspace(min(min(xrow,[],2)),max(max(xrow,[],2)),newpoints ),...
linspace(min(min(ycol,[],1)),max(max(ycol,[],1)),newpoints )...
);
BDmatrixq = interp2(xrow,ycol,BDmatrix,xq,yq,'cubic');
[c,h]=contourf(xq,yq,BDmatrixq);
パラメータnewpoints
を使用して、新しいプロットの「滑らかさ」を選択します。
カラーエッジを減らすには、値のステップ数を増やします。デフォルトでは、これは10です。次のコードは、値ステップの数を50に増やします。
[c,h]=contourf(xq,yq,BDmatrixq,50);
3Dサーフプロットは、非常に滑らかなカラーシェーディングに適しています。回転して、真上からのビューにします。また、サーフプロットは、多くの値ステップを持つコンタープロットよりもはるかに高速です。
f = figure;
ax = axes('Parent',f);
h = surf(xq,yq,BDmatrixq,'Parent',ax);
set(h, 'edgecolor','none');
view(ax,[0,90]);
colormap(Jet);
colorbar;
注1:3次補間は形状を保持しません。つまり、補間された形状は、元のBDmatrix
の最大値よりも大きい最大値(および小さい最小値)を持つことができます。 BDmatrix
にノイズのある値がある場合、補間が正しく行われていない可能性があります。
注2:xrow
とyrow
を生成した場合自分で(そして制限を知っている)、私がしたようなmin-max-extractionは必要ありません。
注3:データマトリックスのスクリーンショットを元の投稿に追加した後、 xrow
およびycol
はndgrid
ジェネレーターから取得されます。したがって、一貫性を保つために、ここでもこれを使用する必要があります。 interp2
にはmeshgrid
が必要ですgriddedInterpolant
に切り替える必要があります:
[xq,yq] = ndgrid(...
linspace(min(min(xrow,[],1)),max(max(xrow,[],1)),newpoints ),...
linspace(min(min(ycol,[],2)),max(max(ycol,[],2)),newpoints )...
);
F = griddedInterpolant(xrow,ycol,BDmatrix,'cubic');
BDmatrixq = F(xq,yq);