子图中的 MATLAB 最后一个图覆盖了其他图

MATLAB last plot in subplot overlays other plots

首先,提前致歉,因为我是 MATLAB(和编码)的新手。

我试图将多个图放在一个子图中 (4,9,n),但是最后一个图覆盖了其余图,并且是唯一一个包含数据的图。

我希望每个图看起来像这样: Line plot with two x axes

这是我正在使用的代码片段(因为我是新手,我没有使用过循环,所以我有每个单独图形的代码!):

%% TMR2    
%set up data
TMR2 = HEOBI1{HEOBI1.STNNBR==2,:}
x1 = TMR2(:,[4])
x2 = TMR2(:,[5])
x3 = TMR2(:,[7])/25
y = TMR2(:,[3])
%set up figure in subplot
subplot(4,9,1)
%set up secondary (H2O2) axis
b=axes('Position',[.1 .1 .8 1e-12]);
set(b,'Units','normalized');
set(b,'Color','none');
b.XColor=[0 153/255 0];
%primary plot (DFE and FEII)
a=axes('Position',[.1 .2 .8 .7]);
set(a,'Units','normalized');
plot(x1,y,'-o','Color',[221/255 15/255 4/255],...
'MarkerFaceColor',[221/255 15/255 4/255])
set(gca,'Ydir','reverse')
xlim([0 3])
hold on
plot(x2,y,'-o','Color',[0 153/255 153/255],...
'MarkerFaceColor',[0 153/255 153/255])
plot(x3,y,'-o','Color',[0 153/255 0],...
'MarkerFaceColor',[0 153/255 0])
hold off
title('2')
%Set secondary (H2O2) axis limit
set(b,'xlim',[0 25]*3);

结束于:

%% TMR40
%set up data
TMR40 = HEOBI1{HEOBI1.STNNBR==40,:}
x1 = TMR40(:,[4])
x2 = TMR40(:,[5])
x3 = TMR40(:,[7])/25
y = TMR40(:,[3])
%set up figure in subplot
subplot(4,9,36)
%set up secondary (H2O2) axis
b=axes('Position',[.1 .1 .8 1e-12]);
set(b,'Units','normalized');
set(b,'Color','none');
b.XColor=[0 153/255 0];
%primary plot (DFE and FEII)
a=axes('Position',[.1 .2 .8 .7]);
set(a,'Units','normalized');
plot(x1,y,'-o','Color',[221/255 15/255 4/255],...
'MarkerFaceColor',[221/255 15/255 4/255])
set(gca,'Ydir','reverse')
xlim([0 3])
hold on
plot(x2,y,'-o','Color',[0 153/255 153/255],...
'MarkerFaceColor',[0 153/255 153/255])
plot(x3,y,'-o','Color',[0 153/255 0],...
'MarkerFaceColor',[0 153/255 0])
hold off
title('40')
%Set secondary (H2O2) axis limit
set(b,'xlim',[0 25]*3);

这是我的最终输出: Incorrect Subplot

@Suever 我仔细考虑了您的建议,并为每个子图取出了 axes 的所有代码。然后我设置 subplot 和句柄并给每个子图一个句柄。我的代码现在是这样开始的:

%% Subplot setup
figure;
for k = 1:36
    h(k) = subplot(4,9,k);
end

现在每个子图的代码如下所示:

%% TMR40
%set up data
TMR40 = HEOBI1{HEOBI1.STNNBR==40,:}
x1 = TMR40(:,[4])
x2 = TMR40(:,[5])
x3 = TMR40(:,[7])/25
y = TMR40(:,[3])
%set up plot
subplot(h(36))
%primary plot (DFE and FEII)
plot(x1,y,'-o','Color',[221/255 15/255 4/255],...
'MarkerFaceColor',[221/255 15/255 4/255])
set(gca,'Ydir','reverse')
xlim([0 3])
hold on
plot(x2,y,'-o','Color',[0 153/255 153/255],...
'MarkerFaceColor',[0 153/255 153/255])
plot(x3,y,'-o','Color',[0 153/255 0],...
'MarkerFaceColor',[0 153/255 0])
hold off
title('40')

子图现在可以正确显示,我可以使用各自的句柄编辑各个子图。再次感谢您的帮助!

您似乎对 subplot 的作用感到困惑,而且您的术语有点不对。你没有 "setup a figure in a subplot"。图是包含所有绘图的整个 window,subplot 是包含各种绘图对象(线条、图像、曲面等)的 axes

但主要问题是 subplot 创建了一个 axes。这意味着您不需要在调用 subplot 之后调用 axes() 否则调用 axes 将创建一个不遵循 [=] 布局的新 axes 12=] 输入。

所以不用

subplot(9,4,36)
a = axes('Position', [.1 .2 .8 .7]);
plot(x, y)

随心所欲

subplot(9,4,36)
plot(x,y)