Matlab形式で保存されたいくつかのデータ(2つのパラメーターの関数)があり、matlabを使用してプロットしたいと思います。データを読み込んだら、mesh()
を使用してプロットを作成します。 mesh()
プロットは、次のように、関数の値を色と表面の高さで示します。
従属変数が色のみとして表される2Dメッシュプロットを作成するには、どのmatlabプロット関数を使用する必要がありますか? gnuplotでpm3d map
のようなものを探しています。
デフォルトでは、mesh
は(デフォルト)jet
カラーマップに基づいて表面の値を色付けします(つまり、ホットが高い)。さらに、塗りつぶされた表面パッチにsurf
を使用し、'EdgeColor'
プロパティを'None'
に設定できます(したがって、パッチのエッジは見えません)。
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
% surface in 3D
figure;
surf(Z,'EdgeColor','None');
2Dマップ:Figureのview
プロパティを切り替えることで2Dマップを取得できます
% 2D map using view
figure;
surf(Z,'EdgeColor','None');
view(2);
...またはZ
の値をマトリックスとして扱い、imagesc
を使用してスケーリングされたイメージとして表示し、適切な colormap を選択します。
% using imagesc to view just Z
figure;
imagesc(Z);
colormap jet;
マップのカラーパレットは、colormap(map)
によって制御されます。map
は、カスタムまたはMATLABが提供する組み込みカラーマップのいずれかです。
マップの更新/調整:マップ上のいくつかの設計オプション(解像度、スムージング、軸など)は、通常のMATLABオプションで制御できます。 @Florisが指摘しているように、この例に適合した、平滑化された等軸、無軸のラベルマップがあります。
figure;
surf(X, Y, Z,'EdgeColor', 'None', 'facecolor', 'interp');
view(2);
axis equal;
axis off;
gevangの答えは素晴らしいです。 pcolor
を使用してこれを直接行う別の方法もあります。コード:
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
figure;
subplot(1,3,1);
pcolor(X,Y,Z);
subplot(1,3,2);
pcolor(X,Y,Z); shading flat;
subplot(1,3,3);
pcolor(X,Y,Z); shading interp;
出力:
また、以下に示すように、pcolor
もフラットです(pcolor
は2Dベースです。上の3D図はmesh
を使用して生成されます)。
Pcolorと "surf + view(2)"の両方が、2Dデータの最後の行と最後の列を表示しないことに注意してください。
一方、imagescを使用する場合は、軸に注意する必要があります。 2Dのsinc関数は対称であるため、gevangの答えのみ(ほとんど-最後の行と列を除く)のsurfとimagescの例は互いに対応しています。
これらの2つのポイントを説明するために、次のコードを使用して以下の図を作成しました。
[x, y] = meshgrid(1:10,1:5);
z = x.^3 + y.^3;
subplot(3,1,1)
imagesc(flipud(z)), axis equal tight, colorbar
set(gca, 'YTick', 1:5, 'YTickLabel', 5:-1:1);
title('imagesc')
subplot(3,1,2)
surf(x,y,z,'EdgeColor','None'), view(2), axis equal tight, colorbar
title('surf with view(2)')
subplot(3,1,3)
imagesc(flipud(z)), axis equal tight, colorbar
axis([0.5 9.5 1.5 5.5])
set(gca, 'YTick', 1:5, 'YTickLabel', 5:-1:1);
title('imagesc cropped')
colormap jet
ご覧のとおり、サーフプロットでは10行5列が欠落しています。 (これは他の回答の画像でも見ることができます。)
「set(gca、 'YTick' ...」(およびXtick)コマンドを使用して、xとyが1:1:Nでない場合にxとyの目盛りラベルを適切に設定する方法に注意してください。
また、imagescは、zデータがxsとysに対応し、(それぞれ)等間隔である場合にのみ意味があることに注意してください。そうでない場合は、surfを使用できます(そして最後の列と行ともう1つの「(end、end)」値を複製できます-これは一種の汚いアプローチですが)。
contourf(Z)
を使用することもお勧めします。私の問題については、3Dヒストグラムを2Dで視覚化したかったのですが、輪郭が滑らかすぎて、ヒストグラムバーの上面を表すことができませんでした。
したがって、私の場合、jucestainの答えを使用することを好みます。 pcolor()
のデフォルトshading faceted
がより適しています。ただし、pcolor()
は、プロットされたマトリックスの最後の行と列を使用しません。このために、padarray()
関数を使用しました。
pcolor(padarray(Z,[1 1],0,'post'))
それが元の投稿と実際に関連していない場合は申し訳ありません