Matlab如何制作平滑的等高线图?
Matlab how to make smooth contour plot?
我想用二维格式的 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 矩阵。然而,我得到的是:
以下是xrow和yrow矩阵:
BD矩阵如下:
轮廓颜色是否可以平滑变化而不是显示为连接数据点的直线?这个图的问题是粒度粗,不吸引人。我试图用 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
选择新地块"smoothness"。
要减少颜色边缘,可以增加值步数。默认情况下,这是 10。以下代码将值步数增加到 50:
[c,h]=contourf(xq,yq,BDmatrixq,50);
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;
注1:三次插值不保形。这意味着,插值形状的最大值可以大于原始 BDmatrix
的最大值(以及更小的最小值)。如果 BDmatrix
有噪声值,插值可能不好。
注2:如果你自己生成xrow
和yrow
(并且知道限制) ,比起我所做的那样,你不需要最小-最大-提取。
注3:将数据矩阵的屏幕截图添加到您的原始帖子后,可以看到,xrow
ycol
来自 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);
我想用二维格式的 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 矩阵。然而,我得到的是:
以下是xrow和yrow矩阵:
BD矩阵如下:
轮廓颜色是否可以平滑变化而不是显示为连接数据点的直线?这个图的问题是粒度粗,不吸引人。我试图用 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
选择新地块"smoothness"。
要减少颜色边缘,可以增加值步数。默认情况下,这是 10。以下代码将值步数增加到 50:
[c,h]=contourf(xq,yq,BDmatrixq,50);
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;
注1:三次插值不保形。这意味着,插值形状的最大值可以大于原始 BDmatrix
的最大值(以及更小的最小值)。如果 BDmatrix
有噪声值,插值可能不好。
注2:如果你自己生成xrow
和yrow
(并且知道限制) ,比起我所做的那样,你不需要最小-最大-提取。
注3:将数据矩阵的屏幕截图添加到您的原始帖子后,可以看到,xrow
ycol
来自 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);