scatter3问题

时间:2014-09-09 11:44:38

标签: matlab plot scatter3d

可能是scatter3我不明白的地方。我有一个矩阵,其中所有切片但最后一个是NaNed(M(:,:,1:10) = NaN;),然后它被置换切换第一个和最后一个维度。因此M(11,:,:)中只有值。我希望所有绘制的值都在x==11的Y-Z平面上,但是情节看起来不同(参见下面的代码和图片)。有什么解释吗?

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);

enter image description here

1 个答案:

答案 0 :(得分:2)

解释是meshgrid切换 x y

来自meshgrid文档:

  

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

乍一看,这应该会在 y == 11( x 和< em> y 相对于您最初的预期进行了互换。但请注意,您的代码错误地处理 x y 大小(因为meshgrid)。这具有额外的效果,即xy坐标得到洗牌&#34;并且你没有看到一个平面(即使在 X-Z 中),而是一个格子。

所以解决方案是使用ndgrid,它不进行任何切换。只需替换&#34; meshgrid&#34; by&#34; ndgrid&#34;在你的代码中。结果数字现在符合预期:

enter image description here