Matlab - 调整 xlim 和 ylim 以使用 surfc 去除白边

Matlab - adapt xlim and ylim to remove white margin with surfc

我遇到了有关带有温度的表面的二维地图绘图(用颜色表示)的问题。我在这里绘制的解决方案是对称的。

array x 表示包含 (sizex,sizey) 地图大小上的温度的数组。在我的代码中,sizex = 256sizey = 96.

我使用以下代码片段进行绘图:

surfc(x);
shading interp;
view([0,0,1]);
hc=colorbar;
set(hc,'position',[0.932 0.3 0.02 0.6]);
caxis([-10 10]);
xlabel('x domain');
ylabel('y domain');
zlabel('temperature');
xlim([0 sizex+2]);
ylim([0 sizey+2]);

我得到下图:

如您在脚本中所见,我在 sizexsizey 中添加了“2”以填充白色外边距。

如果我不添加这些值,即:

xlim([0 sizex]);
ylim([0 sizey]);

然后,我得到下图:

并且您会注意到右侧和上方的部分解决方案未显示(而是隐藏)。

您还可以看到,即使在上面的第一张图上(第二张图也是如此)(在 xlimylim 中添加“2”),它仍然有轻微的白色边缘在底部,我不知道如何删除它。

更准确地说,我想使绘图的尺寸与网格数据的尺寸完全吻合,即温度超过 256x96 大小而没有边距。

首先你把sizexsizey定义错了。我从 pastebin 复制了你的数据,size(x) 产生了 [258,98] 而不是 [256,96].
现在您遇到的另一个问题如下:您将二维矩阵 x 馈送到 surfc。现在命令的作用是将值 x(1,1) 放在图中的位置 (1,1) 处。如果您不想要这些 "white borders",则需要将值放在 (0,0) 位置。您可以通过将三个矩阵 XYZ 提供给 surfc 命令来实现。您可以按如下方式生成矩阵:

[X,Y]=meshgrid(0:size(x,2)-1,0:size(x,1)-1);
Z=x;
surfc(X,Y,Z);
% From here on your regular code starts
shading interp;
view([0,0,1]);
hc=colorbar;
set(hc,'position',[0.932 0.3 0.02 0.6]);
caxis([-10 10]);
xlabel('x domain');
ylabel('y domain');
zlabel('temperature');

您现在应该不需要定义图的限制。如果您仍然需要,请使用此:

xlim([0,size(x,2)-1]);
ylim([0,size(x,1)-1]);