8

Figure を作成したいと思います。サブプロットが作成されたら、for ループを経由せずに、それらすべてに同時にプロパティを適用したいと思います。実際、for ループを経由せずに次のすべてを実行したいと考えています。

  • for ループを使用せずにすべてのサブプロットを作成します。(たとえば、for ループを使用せずに、4x5 サブプロットを含む Figure を作成します)。
  • ループなしの各サブプロットに同じ背景色を適用します。
  • forループを使用して、同じ軸コマンドをそれらすべてに適用します。(軸が等しい、軸がタイトなど)。

これを行う方法はありますか?

4

2 に答える 2

11

最も便利な方法は、Axes ハンドルの配列を作成してから、プロパティを設定することです。

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')

軸ハンドルを収集していない場合は、最初にハンドルの配列を収集する必要があります。これには、Figure ウィンドウの子プロパティを使用できます (gcf現在アクティブな Figure のハンドルを取得します)。

axesHandles = get(gcf,'children');

複数の図にまたがる軸がある場合はfindall、すべてを収集するために使用できます。

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

それ以降は、たとえばset、または への単一の呼び出しになります。axis

set(axesHandles,'color','k','lineWidth',2)
axis(axesHandles,'tight')
于 2012-09-02T13:12:16.673 に答える
2

forループが悪だと思う理由が理解できませんが、ともかく...

軸ハンドルが配列に保存されていると仮定して、質問のパート 2 と 3 に対する回答を次に示します。

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

arrayfunの要素のそれぞれと 1 つに関数を適用します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

別の可能な方法は、軸をリンクし、1 つのプロパティのみを設定することです。

   linkprop(a,'Color');
   set(a(1),'Color','r'); %#Now a(2) color is also red
于 2012-09-02T12:37:19.287 に答える