Matlab - 调整 xlim 和 ylim 以使用 surfc 去除白边
Matlab - adapt xlim and ylim to remove white margin with surfc
我遇到了有关带有温度的表面的二维地图绘图(用颜色表示)的问题。我在这里绘制的解决方案是对称的。
array x
表示包含 (sizex
,sizey
) 地图大小上的温度的数组。在我的代码中,sizex = 256
和 sizey = 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]);
我得到下图:
如您在脚本中所见,我在 sizex
和 sizey
中添加了“2”以填充白色外边距。
如果我不添加这些值,即:
xlim([0 sizex]);
ylim([0 sizey]);
然后,我得到下图:
并且您会注意到右侧和上方的部分解决方案未显示(而是隐藏)。
您还可以看到,即使在上面的第一张图上(第二张图也是如此)(在 xlim
和 ylim
中添加“2”),它仍然有轻微的白色边缘在底部,我不知道如何删除它。
更准确地说,我想使绘图的尺寸与网格数据的尺寸完全吻合,即温度超过 256x96
大小而没有边距。
首先你把sizex
和sizey
定义错了。我从 pastebin 复制了你的数据,size(x)
产生了 [258,98]
而不是 [256,96]
.
现在您遇到的另一个问题如下:您将二维矩阵 x
馈送到 surfc
。现在命令的作用是将值 x(1,1)
放在图中的位置 (1,1)
处。如果您不想要这些 "white borders",则需要将值放在 (0,0)
位置。您可以通过将三个矩阵 X
、Y
、Z
提供给 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]);
我遇到了有关带有温度的表面的二维地图绘图(用颜色表示)的问题。我在这里绘制的解决方案是对称的。
array x
表示包含 (sizex
,sizey
) 地图大小上的温度的数组。在我的代码中,sizex = 256
和 sizey = 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]);
我得到下图:
如您在脚本中所见,我在 sizex
和 sizey
中添加了“2”以填充白色外边距。
如果我不添加这些值,即:
xlim([0 sizex]);
ylim([0 sizey]);
然后,我得到下图:
并且您会注意到右侧和上方的部分解决方案未显示(而是隐藏)。
您还可以看到,即使在上面的第一张图上(第二张图也是如此)(在 xlim
和 ylim
中添加“2”),它仍然有轻微的白色边缘在底部,我不知道如何删除它。
更准确地说,我想使绘图的尺寸与网格数据的尺寸完全吻合,即温度超过 256x96
大小而没有边距。
首先你把sizex
和sizey
定义错了。我从 pastebin 复制了你的数据,size(x)
产生了 [258,98]
而不是 [256,96]
.
现在您遇到的另一个问题如下:您将二维矩阵 x
馈送到 surfc
。现在命令的作用是将值 x(1,1)
放在图中的位置 (1,1)
处。如果您不想要这些 "white borders",则需要将值放在 (0,0)
位置。您可以通过将三个矩阵 X
、Y
、Z
提供给 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]);