увеличить пространство между ломтиками - PullRequest
1 голос
/ 26 апреля 2020

Я пытаюсь проиллюстрировать 2D матрицы в 20 снимках. Я построил его, используя slice, но кроме верхней матрицы, остальные не видны. Есть ли способ увеличить расстояние между срезами, чтобы можно было видеть каждую плоскость? Может ли кто-нибудь предложить альтернативный способ показать временную эволюцию матрицы 4x8 для t=1:20? Вот крошечный код, который я использовал для построения своих данных:

T2=20;
Xc = zeros(8,4,T2);
for j = 1:T2
    Xc(:,:,j) = mdp2(j).X{1};
end
hs = slice(Xc,[],[],1:T2) ;
lightangle(-45,45);
view([-25 30]);
xticks(linspace(0,20,41));
axis on;

Как я могу изменить тики и метки для осей здесь? enter image description here Заранее спасибо

1 Ответ

4 голосов
/ 26 апреля 2020

Ваш код с некоторыми случайными данными:

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;

Original image

Как упомянуто @ 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])

Создает изображение следующим образом:

Graph with extended Z-axis

Я также добавил бы некоторую прозрачность, чтобы сделать данные видимыми:

alpha(h, 0.7);

Transparent Graph

Как изменить здесь метки и метки для осей

Использовать свойство осей или функция XTick, YTick, ZTick. Кроме того, измените линию обзора камеры на view() как

xticks(1:4);
view(30, 20);

, что дает:

Changed view

РЕДАКТИРОВАТЬ 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);
...