Применить свойства графика одновременно ко всем дочерним участкам 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