Применить свойства графика ко всем подзаголовкам MATLAB одновременно

Я хотел бы создать фигуру, и как только будут созданы подзаголовки, я хотел бы применить свойства ко всем из них одновременно, не проходя через цикл for. На самом деле, я хотел бы сделать все без необходимости проходить через цикл for:

  • создайте все подзаголовки без for-loop. (Например, создайте рисунок с подзаголовками 4x5, не используя for-loop).
  • применить тот же цвет фона для каждого подзаголовка без Фоор-петля.
  • примените одну и ту же команду axis ко всем из них без for-loop. (Как ось равная, ось плотная, etc).

есть ли способ сделать это?

2 ответов


самый удобный подход-создать массив осей-ручек, а затем задать свойства:

for i=1:4,
   axesHandles(i) = subplot(2,2,i);
   plot(...)
end

%# set background to black for all handles in the array
%# note that this needs no loop
set(axesHandles,'color','k')

если у вас нет собранных дескрипторов осей, сначала вам нужно собрать массив дескрипторов. Для этого можно использовать дочерние свойства окна рисунок (gcf получает дескриптор текущей активной фигуры)

axesHandles = get(gcf,'children');

и если у вас есть оси на нескольких фигурах, вы можете использовать findall собрать все:

axesHandles = findall(0,'type','axes');

С тех пор, это еще один вызов set или axis, например

set(axesHandles,'color','k','lineWidth',2)
axis(axesHandles,'tight')

Я не могу понять, почему ты так думаешь for петля-это зло, но так или иначе ...

вот ответ на части 2 и 3 Вашего вопроса, предполагая, что дескрипторы осей были сохранены в массиве:

   a(1) = axes();
   a(2) = axes();
   arrayfun( @(x)(set(x,'Color','r')),a);
   arrayfun( @(x)(axis(x,'equal')),a);

arrayfun применяет функцию к каждому и одним из элементов a. Анонимная функция в этом случае является только ярлыком для написания ее следующим образом:

   a(1) = axes();
   a(2) = axes();
   arrayfun( @SetRedColor ,a);
   arrayfun( @SetAxisEqual,a);

   function SetRedColor(x)
       set(x,'Color','r');
   end

   function SetAxisEqual(x)
       axis(x,'equal');
   end

другой возможный способ-связать оси и установить только одну свойство:

   linkprop(a,'Color');
   set(a(1),'Color','r'); %#Now a(2) color is also red