Ваш код с некоторыми случайными данными:
T2=20;
Xc = zeros(8,4,T2);
for j = 1:T2
Xc(:,:,j) = rand(8,4);
end
hs = slice(Xc,[],[],1:T2) ;
lightangle(-45,45);
view([-25 30]);
xticks(linspace(0,20,41));
axis on;
Как упомянуто @ CrisLuen go, вот свойство DataAspectRatio
как есть (или используйте функцию daspect()
, см. здесь , чтобы получить эту информацию):
h = gca;
h.DataAspectRatio
ans =
1 2.33333333333333 6.66666666666667
% Or use function daspect()
Из Документация MATLAB :
daspect ([1 2 3]) указывает, что длина одной единицы вдоль оси x равна длине двух единиц вдоль оси y и трех единиц вдоль оси z.
Уменьшение h.DataAspectRatio[3]
увеличивает разрывы срезов. Например:
set(h, 'DataAspectRatio', [1 2.333 2])
Создает изображение следующим образом:
Я также добавил бы некоторую прозрачность, чтобы сделать данные видимыми:
alpha(h, 0.7);
Как изменить здесь метки и метки для осей
Использовать свойство осей или функция XTick
, YTick
, ZTick
. Кроме того, измените линию обзора камеры на view()
как
xticks(1:4);
view(30, 20);
, что дает:
РЕДАКТИРОВАТЬ 1 :
При использовании slice(Xc,[],[],1:T2)
предполагается, что Xc
- это объемные данные с координатами, определяемыми размером Xc
. Эти координаты следуют за представлением сетки , что означает, что вся сетка определяется этими координатами. Если ваши данные представляют координаты между точками сетки (что имеет место в данном случае), то вам следует откорректировать отсутствующие данные в конце каждого измерения. Поэтому, если я создаю двоичный случайный набор данных размером 8 x 4 x 20, у меня есть:
T2=20;
nRows = 8;
nCols = 4;
mdp2 = zeros(nRows, nCols, T2);
for j = 1:T2
mdp2(:,:,j) = round(rand(nRows,nCols)); % Binary data
end
Чтобы согласовать размер сетки, вы должны сделать что-то вроде этого:
Xc = zeros(nRows+1,nCols+1,T2);
for j = 1:T2
expan1 = [mdp2(:,:,j) mdp2(:,1,j)];
Xc(:,:,j) = [expan1; expan1(1,:)];
end
Который затем отображает все данные в Xc
при выполнении
hs = slice(Xc,[],[],1:T2);