Графические массивы

Графические массивы могут содержать указатели любых графических объектов. Например, этот вызов функции plot возвращает массив, содержащий пять указателей объекта линии:

y = rand(20,5);
h = plot(y)
h = 

  5x1 Line array:

  Line
  Line
  Line
  Line
  Line

Этот массив содержит только указатели на объекты линии. Однако графические массивы могут содержать больше чем один тип графического объекта. Таким образом, графические массивы могут быть неоднородными.

Например, можно конкатенировать указатели фигуры, осей и объектов линии в один массив, harray:

hf = figure;
ha = axes;
hl = plot(1:10);
harray = [hf,ha,hl]
harray = 

  1x3 graphics array:

    Figure    Axes      Line

Графические массивы следуют тем же правилам как любой массив MATLAB®. Например, размерности элемента массива должны согласиться. В этом коде график возвращает массив Строки 5 на 1:

hf = figure;
ha = axes;
hl = plot(rand(5));
harray = [hf,ha,hl];
Error using horzcat
Dimensions of matrices being concatenated are not consistent.

Чтобы сформировать массив, необходимо транспонировать hl:

harray = [hf,ha,hl']
harray = 

  1x7 graphics array:

   Figure    Axes      Line      Line      Line      Line      Line

Вы не можете конкатенировать числовые данные с указателями на объект, за исключением уникального идентификатора, заданного фигурой свойство Number. Например, если существует существующая фигура с его набором свойств Number к 1, можно обратиться к той фигуре этим номером:

figure(1)
aHandle = axes;
[aHandle,1]
ans = 

  1x2 graphics array:

    Axes      Figure

Те же правила для формирования массивов применяются к индексируемому присвоению. Например, можно создать массив указателя с циклом for:

harray = gobjects(1,7);
hf = figure;
ha = axes;
hl = plot(rand(5));
harray(1) = hf;
harray(2) = ha;
for k = 1:length(hl)
   harray(k+2) = hl(k);
end
Была ли эта тема полезной?