MATLAB:需要制作4D图(3D +颜色/颜色)

Mik*_*ike 7 3d matlab colors multidimensional-array

我需要制作一个3D表面,其中颜色代表第四个变量.我知道"冲浪"与我所需要的相似,但事实并非如此.基本上,我有以下变量:

t = [1:m]

y = [1:n]

a = [1:o]

这些应该是三个笛卡尔坐标轴.

我还有一个变量S,其尺寸为mxnxo,基本上是幅度,是前三个变量的函数(即S = f(t,y,a)).我想要用颜色来表示.

总而言之,我需要一个形式(t,y,a,S)的图形,其中前三个变量是不等大小的向量,最终变量是一个多维数组,其维度由前三个确定.

提前致谢.

yuk*_*yuk 10

SCATTER3要求x,y以及z与其他分组参数是用于单个串联或N×M个矩阵为M系列相等大小的NX1载体.

您拥有全空间3D数据.要制作大小相同的坐标向量,请使用MESHGRID(或NDGRID)函数:

[X, Y, Z] = meshgrid(t, y, a);
Run Code Online (Sandbox Code Playgroud)

然后你可以使用SCATTER3:

scatter3( X(:), Y(:), Z(:), [], S(:) )
Run Code Online (Sandbox Code Playgroud)

问题是因为如果你有很多分数,那么它的全空间数据scatter3将没有用处.

你可以过滤你的S变量(类似的东西idx = S > 0),然后你可以绘制过滤后的数据.

如果您确实需要可视化所有数据,请查看MATLAB文档中的Volume可视化.例如,我可以推荐SLICE功能.

编辑

下面是完整的3D空间散点图小载体的例子(m,n,o具有等于5)S = rand([m,n,o]); scatter3( X(:), Y(:), Z(:), [], S(:), 'filled' )

分散的例子

编辑2

从您的评论到其他答案,我发现您有32x76050x4矩阵.您实际上可以一次绘制一个2D切片.您可以使用IMAGESC功能在2D中进行,或使用SLICE功能在3D中进行.

尝试:

imagesc(S(:,:,k))
Run Code Online (Sandbox Code Playgroud)

其中k是从1到4的数的第三维.

或者试试

slice(S, [], [], 1:size(S,3))
shading flat
Run Code Online (Sandbox Code Playgroud)

切片示例


rut*_*ike 1

我一直使用 scatter3 在 3d 空间中对像素进行着色/调整大小。我相信签名是:

scatter3(x,y,z, size, color)
Run Code Online (Sandbox Code Playgroud)

大小和颜色可以是标量或长度等于坐标的向量。我通常使用颜色或大小来反映第四个属性,具体取决于我所显示的内容。我这台机器上没有Matlab,所以如果我的记忆对用法不完全准确,请原谅我。“help scatter3”应该更好地描述它。