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