2

这应该很简单——但似乎并非如此。我只是想要一个有五个相邻的子图的图形 - 中间没有空格。此外,第一个棘手的部分可能是我想要第一个使用 floatAxisX 的子图。

假设我有四个变量:

 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]);

只给了我一个数字,最后三个子图彼此相邻。我将不胜感激得到一些解释为什么会发生这种情况以及如何解决它。

4

1 回答 1

3

从帮助subplot

如果子图规范导致新轴与
现有轴重叠,则删除现有轴 - 除非
新轴和现有轴的位置相同。

您的代码正在执行此操作,尽管您可能没有意识到这一点。您调用subplot(151),它将轴放置在默认位置,然后手动定位它。因为您手动定位了第一个轴,所以调用subplot(152)与调用相同,subplot(151)并且新轴最终位于第一个轴的顶部,导致后者被删除。依此类推,直到您将轴从放置默认轴的区域移开。

有几种方法可以解决这个问题。您可以创建所有子图,然后返回并定位它们。您可以从图形 ( 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)为仅显示最后三个的问题仍然存在。

于 2013-07-28T02:14:11.003 回答