我需要制作一个3D表面,其中颜色代表第四个变量。我知道“冲浪”与我所需要的相似,但事实并非如此。基本上,我有以下变量:
t = [1:m]
y = [1:n]
a = [1:o]
这些应该是三个笛卡尔坐标轴。
我还有一个变量S,其尺寸为m×n×o,并且基本上是幅度,是前三个变量的函数(即S = f(t,y,a))。我希望用颜色来表示。
总而言之,我需要一个形式(t,y,a,S)的图形,其中前三个变量是不等大小的向量,最终变量是一个多维数组,其维数由前三个确定
提前致谢。
答案 0 :(得分:10)
SCATTER3要求x
,y
和z
以及其他分组参数为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
n
,o
,S = rand([m,n,o]); scatter3( X(:), Y(:), Z(:), [], S(:), 'filled' )
等于5)的完整3D空间散点图示例
编辑2
从您的评论到其他答案,我发现您有32x76050x4矩阵。您实际上可以一次绘制一个2D切片。您可以使用IMAGESC功能在2D中进行,或使用SLICE功能在3D中进行。
尝试:
imagesc(S(:,:,k))
其中k
是第3维的1到4之间的数字。
或尝试
slice(S, [], [], 1:size(S,3))
shading flat
答案 1 :(得分:3)
也许this user-created plotting routine可以提供帮助。链接页面的屏幕截图:
答案 2 :(得分:1)
我总是使用scatter3来着色/调整3d空间中的像素大小。我相信签名是:
scatter3(x,y,z, size, color)
大小和颜色可以是标量或长度等于坐标的矢量。我通常使用颜色或大小来反映第四个属性,这取决于我正在展示的内容。我没有在这台机器上使用Matlab,所以请原谅我,如果我的记忆在使用上并不完全准确。 “help scatter3”应该更好地描述它。