我想创建一个图形,一旦创建了子图,我想同时将属性应用于所有这些,而不需要通过for循环。事实上,我想在不需要通过for循环的情况下完成以下所有操作:
有办法做到这一点吗?
答案 0 :(得分:10)
最方便的方法是创建一个轴手柄数组,然后设置属性:
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')
答案 1 :(得分:2)
我无法理解为什么你认为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