2

これは単純なはずですが、そうではないようです。間にスペースを入れずに、5 つのサブプロットが隣り合った図が欲しいだけです。また、おそらく最初のトリッキーな部分は、floatAxisX を使用する最初のサブプロットが必要なことです。

4 つの変数があるとします。

 x1 = salinity 
 x2 = temperature
 x3 = density 
 y = depth

したがって、私のコードは次のようになります。

figure;
hfig = figure('Name','xxx');
set(gcf,'Position',get(0,'ScreenSize'))
set(hfig,'color','w');

subplot(151);set(subplot(151),'Position',[0.15 0.15 0.15 0.75]);

    % plot salinity vs depth
     hl1=plot(x1,y,'k-');
    % assign current axis handle to variable for later reference if needed
     ax1=gca;
    % set properties of the axes
     set(ax1,'XMinorTick','on','ydir','reverse', 'ytick',[0:25:150],'box','on','xcolor',get(hl1,'color'))   

    % add 1st floating axis for the second parameter (temperature) plotted
      [hl2,ax2,ax3] = floatAxisX(x2,y,'r:','Temperature (C)',[5 15 0 150]);
      set(ax2,'ydir','reverse','ytick',[0:25:150])

     % add 2nd floating axis for the third parameter (density) plotted
      [hl3,ax4,ax5] = floatAxisX(x3,y,'b--','Density (Kg m^-^3)',[24 27 0 150]);
      set(ax4,'ydir','reverse','ytick',[0:25:150]);

 subplot(152);set(subplot(152),'Position',[0.31 0.35 0.15 0.55]);

たとえば、次を使用して個別のプロットをまとめていhold onます。

        plot(x1,y);axis ij; 

 subplot(153);set(subplot(153),'Position',[0.46 0.35 0.15 0.55]);

        plot(x1,y);axis ij; 

 subplot(154);set(subplot(154),'Position',[0.61 0.35 0.15 0.55]);

        plot(x1,y);axis ij; 

 subplot(155);set(subplot(155),'Position',[0.76 0.35 0.15 0.55]);

        plot(x1,y);axis ij; 

次のことを行うだけであることに注意してください

 subplot(151);set(subplot(151),'Position',[0.15 0.15 0.15 0.75]);
 subplot(152);set(subplot(152),'Position',[0.31 0.35 0.15 0.55]);
 subplot(153);set(subplot(153),'Position',[0.46 0.35 0.15 0.55]);
 subplot(154);set(subplot(154),'Position',[0.61 0.35 0.15 0.55]);
 subplot(155);set(subplot(155),'Position',[0.76 0.35 0.15 0.55]);

最後の3つのサブプロットが隣り合っている図だけが得られます。なぜこのようなことが起こるのか、どのように解決すればよいのか、説明をいただければ幸いです。

4

1 に答える 1

3

のヘルプからsubplot:

サブプロットの指定によって新しい軸が既存の軸とオーバーラップする場合、
既存の軸は削除されます (
新しい軸と既存の軸の位置が同じでない限り)。

気付いていないかもしれませんが、コードはこれを行っています。を呼び出しsubplot(151)て、軸をデフォルトの位置に配置してから、手動で配置します。最初の軸を手動で配置したため、呼び出しsubplot(152)は呼び出しと同じでsubplot(151)あり、新しい軸が最初の軸の上に配置され、後者が削除されます。既定の軸が配置されている領域から軸を移動するまで、以下同様です。

これにはいくつかの方法があります。すべてのサブプロットを作成してから、戻って配置できます。Figure の右側からサブプロットを作成し ( subplot(155))、左に移動できます。または、次の方法で直接目的の位置にサブプロットを作成できます。

subplot('Position',[0.15 0.15 0.15 0.75]);
subplot('Position',[0.31 0.35 0.15 0.55]);
subplot('Position',[0.46 0.35 0.15 0.55]);
subplot('Position',[0.61 0.35 0.15 0.55]);
subplot('Position',[0.76 0.35 0.15 0.55]);

plot(AX,...)後でまたはを介し​​てこれらの軸に個別にプロットする必要がある場合は、これらのリターン ハンドルを使用できます。subplot(AX); plot(...)ここAXで、 は軸ハンドルです。

subplotのヘルプには、スタイルに関する特別なコメントが含まれていることにも注意してくださいsubplot(151)。特に:

この構文はハンドルを返さないため、戻り引数を指定するとエラーになります。

私は自分でハンドルを取り戻しましたが、それが信頼できるかどうかはわかりません。それでも、スタイルを変更してsubplot(1,5,1)、最後の 3 つだけを表示するという問題は解決しません。

于 2013-07-28T02:14:11.003 に答える