我有一些以matlab格式存储的数据(两个参数的函数),我想用matlab绘制它.一旦我读入数据,我就会mesh()用来制作一个情节.我的mesh()情节给了我作为颜色和表面高度的函数值,如下所示:

我应该用什么matlab绘图函数来制作一个二维网格图,其中因变量只表示为一种颜色?我正在寻找类似于pm3d mapgnuplot的东西.
gev*_*ang 41
默认情况下,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');
Run Code Online (Sandbox Code Playgroud)

2D地图:您可以通过切换图的view属性来获取2D地图
% 2D map using view
figure;
surf(Z,'EdgeColor','None');
view(2);
Run Code Online (Sandbox Code Playgroud)

...或将值Z作为矩阵处理,使用imagesc并选择适当的色彩图将其视为缩放图像.
% using imagesc to view just Z
figure;
imagesc(Z);
colormap jet;
Run Code Online (Sandbox Code Playgroud)
地图的彩色调色板,通过控制colormap(map),其中map可以是定制的或通过任何提供MATLAB内置的色彩映射的:

更新/优化地图:地图上的几个设计选项(分辨率,平滑,轴等)可以通过常规MATLAB选项进行控制.正如@Floris所指出的,这里是一个平滑的,等轴,无轴标签贴图,适用于这个例子:
figure;
surf(X, Y, Z,'EdgeColor', 'None', 'facecolor', 'interp');
view(2);
axis equal;
axis off;
Run Code Online (Sandbox Code Playgroud)

Jus*_*tin 19
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;
Run Code Online (Sandbox Code Playgroud)
输出:

此外,pcolor也是扁平的,如此处所示(pcolor是2d基础;它上方的3d图是使用生成的mesh):

请注意,pcolor和"surf + view(2)"都不会显示2D数据的最后一行和最后一列.
另一方面,使用imagesc,你必须小心轴.gevang的答案中的surf和imagesc示例(几乎 - 除最后一行和列之外)相互对应,因为2D sinc函数是对称的.
为了说明这两点,我使用以下代码生成了下图:
[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
Run Code Online (Sandbox Code Playgroud)

如您所见,冲浪地块中缺少第10行和第5列.(您也可以在其他答案的图像中看到这一点.)
注意如果x和y不是1:1:N,如何使用"set(gca,'YTick'..."(和Xtick)命令正确设置x和y刻度标签.
另请注意,只有当z数据对应于xs且ys(每个)等间距时,imagesc才有意义.如果不是,你可以使用冲浪(并且可能复制最后一列和一行以及另一个"(结束,结束)"值 - 尽管这是一种肮脏的方法).