我想用2D格式的2个变量表示数据。该值由颜色表示,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矩阵。但是,我得到的是:

Matlab如何制作平滑的轮廓图?-LMLPHP

以下是xrow和yrow的数学模型:

Matlab如何制作平滑的轮廓图?-LMLPHP

以下是BDmatrix的数学模型:

Matlab如何制作平滑的轮廓图?-LMLPHP

轮廓颜色是否可以平滑变化,而不是像连接数据点的直线一样出现?这个数字的问题是粗糙的粒度,没有吸引力。我试图用imagec代替Contourf,但似乎不起作用。我正在使用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选择新图的“平滑度”。

Matlab如何制作平滑的轮廓图?-LMLPHP

要减少“颜色”边缘,您可以增加值(value)步骤的数量。默认情况下为10。下面的代码将值(value)步骤的数量增加到50:
 [c,h]=contourf(xq,yq,BDmatrixq,50);

Matlab如何制作平滑的轮廓图?-LMLPHP

3D-surf图将更适合于非常平滑的阴影。只需将其旋转到自顶向下的 View 即可。冲浪图也比轮廓图要快得多,并具有很多值(value)步骤。
 f = figure;
 ax = axes('Parent',f);
 h = surf(xq,yq,BDmatrixq,'Parent',ax);
 set(h, 'edgecolor','none');
 view(ax,[0,90]);
 colormap(Jet);
 colorbar;

Matlab如何制作平滑的轮廓图?-LMLPHP

注1:三次插值不保留形状。这意味着,内插形状的最大值可以大于原始BDmatrix的最大值(而最小值则较小)。如果BDmatrix具有嘈杂的值,则插值可能不好。

注2:如果您自己生成了xrowyrow(并且知道了限制),那么您不需要像我那样进行min-max-extraction。

注3:将数据矩阵的屏幕快照添加到原始帖子后,您可以看到xrowycol来自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);

09-28 08:47