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

时间:2016-06-04 03:11:44

标签: matlab subplot

首先,请提前道歉,因为我是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')

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

1 个答案:

答案 0 :(得分:1)

看起来你对subplot做了什么感到困惑,你的术语有点偏。您没有“在subplot中设置数字”。图是包含所有绘图的整个窗口,subplotaxes,用于保存各种绘图对象(线条,图像,曲面等)。

但主要问题是subplot 会创建axes 。这意味着您在调用axes()后无需致电subplot,否则对axes的调用将创建一个不遵守{{1}布局的新axes 1}}输入。

所以而不是

subplot

只做

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