我需要制作一个 3D 表面,其中颜色代表第四个变量。我知道“冲浪”与我所需要的很相似,但事实并非如此。基本上,我有以下变量:
t = [1:m]
y = [1:n]
a = [1:o]
这些应该是三个笛卡尔坐标轴。
我还有一个维度为 m x n x o 的变量 S,它基本上是振幅,是前三个变量的函数(即 S = f(t,y,a))。我希望用颜色表示。
总而言之,我需要一个 (t,y,a,S) 形式的图,其中前三个变量是大小不等的向量,最后一个变量是一个多维数组,其维度由前三个变量决定.
提前致谢。
最佳答案
SCATTER3 要求 x
、y
和 z
以及其他分组参数对于单个系列是大小相等的 Nx1 向量或对于单个系列是 NxM 矩阵M系列。
您拥有全空间 3D 数据。要制作大小相等的坐标向量,请使用 MESHGRID (或 NDGRID )功能:
[X, Y, Z] = meshgrid(t, y, a);
然后你可以使用 SCATTER3:
scatter3( X(:), Y(:), Z(:), [], S(:) )
问题是,如果你有很多点,它的全空间数据 scatter3 将没有帮助。
您可以过滤 S 变量(类似于 idx = S > 0
),然后绘制过滤后的数据。
如果您真的需要可视化所有数据,请查看Volume visualization在 MATLAB 文档中。我可以推荐SLICE功能,例如。
编辑
下面是小向量(m
、n
、o
等于 5)的全 3D 空间散点图示例,S = rand([m,n,o]); scatter3( X(:), Y(:), Z(:), [], S(:), 'filled' )
编辑 2
根据您对其他答案的评论,我发现您有 32x76050x4 矩阵。您实际上可以一次绘制一个 2D 切片。您可以使用 IMAGESC 函数在 2D 中执行此操作,或使用 SLICE 函数在 3D 中执行此操作。
尝试:
imagesc(S(:,:,k))
其中 k
是第 3 维的从 1 到 4 的数字。
或者试试
slice(S, [], [], 1:size(S,3))
shading flat
关于MATLAB:需要制作 4D 图(3D + Color/Color),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9960456/