我有一些以matlab格式存储的数据(两个参数的函数),我想用matlab绘制它。一旦我读入数据,我就用mesh()
制作一个情节。我的mesh()
图给出了函数作为颜色和表面高度的值,如下所示:
我应该使用什么样的matlab绘图函数来制作2D网格图,其中因变量表示为只有颜色?我在gnuplot中寻找像pm3d map
这样的东西。
答案 0 :(得分:42)
默认情况下,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地图:您可以通过切换图的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;
答案 1 :(得分:19)
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
生成的):
答案 2 :(得分:5)
请注意,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
正如您所看到的,冲浪地块中缺少第10行和第5列。 (您也可以在其他答案的图像中看到这一点。)
注意如何使用"设置(gca,' YTick' ..."(和Xtick)命令如果x和y正确设置x和y刻度标签不是1:1:N。
另请注意,只有当z数据对应于xs且ys(每个)等间距时,imagesc才有意义。如果不是,你可以使用冲浪(并且可能复制最后一列和一行以及另外一个"(结束,结束)"值 - 虽然这是一种肮脏的方法)。
答案 3 :(得分:2)
我还建议使用contourf(Z)
。对于我的问题,我想在2D中可视化3D直方图,但轮廓太平滑,无法表示直方图条的俯视图。
所以在我的情况下,我更喜欢使用jucestain的答案。 shading faceted
的默认pcolor()
更合适。
但是,pcolor()
不使用绘制矩阵的最后一行和一列。为此,我使用了padarray()
函数:
pcolor(padarray(Z,[1 1],0,'post'))
很抱歉,如果这与原始帖子没有关系