SCATTER3 требует, чтобы x
, y
и z
и другие аргументы группировки были равными по размеру векторами Nx1 для одной серии или матрицами NxM для серии M.
У вас есть 3D-данные полного пространства. Для создания координатных векторов одинакового размера используйте функцию MESHGRID (или NDGRID ):
[X, Y, Z] = meshgrid(t, y, a);
Тогда вы можете использовать SCATTER3:
scatter3( X(:), Y(:), Z(:), [], S(:) )
Проблема в том, что разброс данных по всему пространству 3 не поможет, особенно если у вас много точек.
Вероятно, вы можете отфильтровать переменную S (что-то вроде idx = S > 0
), затем вы можете построить отфильтрованные данные.
Если вам действительно нужно визуализировать все данные, посмотрите Визуализация объема в документации MATLAB. Я могу порекомендовать функцию SLICE , например.
EDIT
Вот пример полного трехмерного пространственного рассеяния для малых векторов (m
, n
, o
равно 5) с S = rand([m,n,o]); scatter3( X(:), Y(:), Z(:), [], S(:), 'filled' )
РЕДАКТИРОВАТЬ 2
Из ваших комментариев к другому ответу я обнаружил, что у вас матрица 32x76050x4. На самом деле вы можете построить 2D срез по одному. Вы можете сделать это в 2D с функцией IMAGESC или в 3D с функцией SLICE.
Попробуйте:
imagesc(S(:,:,k))
, где k
- число от 1 до 4 для третьего измерения.
Или попробуйте
slice(S, [], [], 1:size(S,3))
shading flat