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

Kel*_*n S 6 matlab plot colors contour

我想用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;
Run Code Online (Sandbox Code Playgroud)

xrow和ycol都是6x6矩阵,代表坐标.BDmatrix是表示相应数据的6x6矩阵.但是,我得到的是:

在此输入图像描述

以下是xrow和yrow matices:

在此输入图像描述

以下是BDmatrix的内容:

在此输入图像描述

轮廓颜色是否可以平滑变化而不是作为连接数据点的直线出现?这个数字的问题是粗粒度,这是不吸引人的.我试图用imagec替换contourf,但似乎无法正常工作.我正在使用MATLAB R2015b.

Loa*_*ada 9

您可以插入数据.

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);
Run Code Online (Sandbox Code Playgroud)

通过参数选择新图的"平滑度" newpoints.

绘制样本

要减少"颜色"边缘,可以增加值步数.默认情况下,这是10.以下代码将value-steps的数量增加到50:

 [c,h]=contourf(xq,yq,BDmatrixq,50);
Run Code Online (Sandbox Code Playgroud)

样品很好

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;
Run Code Online (Sandbox Code Playgroud)

样品光滑

注1:立方插值不是保持形状的.这意味着,插值形状可以具有大于原始最大值的最大值BDmatrix(并且最小值小于原始值).如果BDmatrix有噪声值,则插值可能不好.

注2:如果您生成xrowyrow自己(和认识的限制),比你并不需要一个最小-最大提取我做了什么.

注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);
Run Code Online (Sandbox Code Playgroud)