Применить свойства графика одновременно ко всем дочерним участкам MATLAB

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

  • Создайте все вспомогательные сюжеты без цикла for. (Например, создайте фигуру с 4x5 подзаговорами, не используя цикл for).
  • Примените один и тот же цвет фона к каждому подзаговору без петли.
  • Примените одну и ту же команду оси ко всем из них без цикла for. (Как ось равна, ось туго и т. Д.).

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

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
Другие вопросы по тегам