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

时间:2012-03-31 23:00:51

标签: matlab multidimensional-array colors 3d

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

t = [1:m]

y = [1:n]

a = [1:o]

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

我还有一个变量S,其尺寸为m×n×o,并且基本上是幅度,是前三个变量的函数(即S = f(t,y,a))。我希望用颜色来表示。

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

提前致谢。

3 个答案:

答案 0 :(得分:10)

SCATTER3要求xyz以及其他分组参数为M系列的单个系列或NxM矩阵具有相同大小的Nx1向量。

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

[X, Y, Z] = meshgrid(t, y, a);

然后你可以使用SCATTER3:

scatter3( X(:), Y(:), Z(:), [], S(:) )

问题在于,如果你有很多分数,那么它的全空间数据scatter3将没有用处。

您可以过滤S变量(类似idx = S > 0),然后您可以绘制过滤后的数据。

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

修改

以下是使用m

的小向量(noS = rand([m,n,o]); scatter3( X(:), Y(:), Z(:), [], S(:), 'filled' )等于5)的完整3D空间散点图示例

scatter example

编辑2

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

尝试:

imagesc(S(:,:,k))

其中k是第3维的1到4之间的数字。

或尝试

slice(S, [], [], 1:size(S,3))
shading flat

slice example

答案 1 :(得分:3)

也许this user-created plotting routine可以提供帮助。链接页面的屏幕截图: Screnshot from the linked page

答案 2 :(得分:1)

我总是使用scatter3来着色/调整3d空间中的像素大小。我相信签名是:

scatter3(x,y,z, size, color)

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