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

标签 matlab multidimensional-array colors 3d

我需要制作一个 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 要求 xyz 以及其他分组参数对于单个系列是大小相等的 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功能,例如。

编辑

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

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

关于MATLAB:需要制作 4D 图(3D + Color/Color),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9960456/

相关文章:

python - 如何在 python 中将 for 循环的增量设置为 1?

PHP - 如何访问深层数组的内容,动态构建它的路径

c++ - 带有 C++ 代码的 Simulink S-Function 编译但在生成/设置时出错

matlab - dlmwrite 循环使用

matlab - 如何在Matlab中将uint8转换为int?

android - 尽管正确显示为白色,但图像并未完全显示为白色

javascript - 如何在TimeLine Google图表中按行设置不同的颜色?

linux - MATLAB 无效的 MEX 文件错误 : missing symbol invalid_argument

java - 可全方位扩展的二维数组

c++ - 使用 ICC 配置文件将 L*a*b* 转换为 RGB