3

大概scatter3是我不明白的地方。我有一个矩阵,其中除最后一个之外的所有切片都是 NaNed ( M(:,:,1:10) = NaN;),然后它会置换第一个和最后一个维度。所以 中只有值M(11,:,:)。我希望所有绘制的值都在 YZ 平面中x==11,但绘图看起来不同(参见下面的代码和图片)。有什么解释吗?

M = rand(22,55,11);
M(:,:,1:10) = NaN;
M = permute(M,[3 2 1]);

shape = size(M)
[x, y, z] = meshgrid(1:shape(1), 1:shape(2), 1:shape(3));
scatter3(x(:), y(:), z(:), 4, M(:), 'fill');
view([60 60]);
xlabel('X ', 'FontSize', 16);
ylabel('Y ', 'FontSize', 16);
zlabel('Z ', 'FontSize', 16);

在此处输入图像描述

4

1 回答 1

2

解释是meshgrid开关xy

meshgrid文档:

MESHGRID 与 NDGRID 类似,只是前两个输入和输出参数的顺序是交换的(即 [X,Y,Z] = MESHGRID(x,y,z) 产生与 [Y,X,Z] = NDGRID(y,x,z))。

乍一看,这应该会导致XZ平面中的值在y ==11 处绘制(即xy相对于您最初的预期互换)。但请注意,您的代码错误地处理xy大小(因为meshgrid)。这具有额外的效果,即xy坐标被“打乱”并且您看不到平面(即使在XZ中),而是看到一个格子。

所以解决方案是使用ndgrid,它不做任何切换。只需将代码中meshgrid的“ ndgrid”替换为“”。现在得到的数字与预期的一样:

在此处输入图像描述

于 2014-09-09T11:51:56.970 回答