Matlab 如何在同一绘图中索引和绘图单元格数组中的内容?

Matlab 如何在同一绘图中索引和绘图单元格数组中的内容?,matlab,for-loop,Matlab,For Loop,我希望有人能帮我解决这个问题 最初,我使用以下脚本为数组w和oLmag绘图 figure(1) for i=1:dsize(1) subplot(2,1,1); semilogx(w,oLmag(i,:),color(i)); if(i==1), hold; end end 现在我已经收集了使用不同的w生成的所有oLmag,分别使用单元数组oLmag_c和w_c,使得oLmag_c{1}对应于w_c{1},依此类推。现在我想在一个图中绘制所有对应的oLmag和w hol

我希望有人能帮我解决这个问题

最初,我使用以下脚本为数组w和oLmag绘图

figure(1)
for i=1:dsize(1)
    subplot(2,1,1);
    semilogx(w,oLmag(i,:),color(i));
    if(i==1), hold; end
end
现在我已经收集了使用不同的w生成的所有oLmag,分别使用单元数组oLmag_c和w_c,使得oLmag_c{1}对应于w_c{1},依此类推。现在我想在一个图中绘制所有对应的oLmag和w

hold all;
for i=1:dsize(1)
    for k=1:length(w)
        subplot(2,1,1);
        semilogx(w{k},oLmag{k}(i,:),color(i));
        if(i==1); hold; end
     end;
 end
这看起来不像是把所有的情节放在一起,只产生一个情节。另外,我想在每个情节上都有一个传说,比如1,2…说1代表w_{1}和oLmag_{1}情节等等

在第二个代码块中,hold被调用两次。一开始使用hold all,然后在循环的第一次迭代中进行第二次

if(i==1); hold; end  
第二次调用hold可切换当前轴的保持状态。这可能解释了为什么你只能得到一个情节

我将改变您的方法,在开始时调用hold on或_hold(gca,'on'),并删除嵌套循环内的第二个hold调用(第二个代码块的第6行)

因此,在添加示例数据并删除第6行之后,代码块可以读取如下内容

%# First setup the axes and set 'hold on'
hAxes(1) = subplot(2,1,1)
hAxes(2) = subplot(2,1,2)
hold(hAxes,'on'); %# Using the function form of hold instead
%#hold all 

%# some sample data
w={[1 2] [3 4] [4 5]}; 
oLmag={[22.9983 16.8412; 22.3405 16.1763], ...
       [16.7192 14.0807;14.2588 11.4160], ...
       [12 13;15 14]}; 

 %# nested loops for plotting
 for k=1:length(oLmag) 
    for i=1:length(oLmag{k}) 
        xy=[w{k};oLmag{k}(i,:)]; 
        subplot(2,1,1);
        semilogx(w{k},oLmag{k}(i,:)); 
        subplot(2,1,2);
        %# add plots to second axes here...

        %#if(i==1);hold;end; %# remove extra call to hold
    end;
end

w={[12][34][45]};奥尔马格={[22.9983 16.8412;22.3405 16.1763],[16.7192 14.0807;14.2588 11.4160],[12 13;15 14]};保持(gca,'on');%为k=1保留全部:为i=1保留长度(oLmag):length(oLmag{k})xy=[w{k};oLmag{k}(i,:)];%子批次(2,1,1);半对数x(w{k},oLmag{k}(i,:),颜色(i));子批次(2,1,1);semilogx(xy,color(i));如果(i==1);持有结束;结束;end@Azim:谢谢你的回复。我在上面附上了示例值和使用的代码,以便你可以运行和查看。很抱歉,我尝试将代码缩进行中,但失败了。我应该在绘图中得到6行,w和oLmag单元格中的每个内容有2行。但这段代码只生成4行。我觉得事情不对劲。希望能收到你的来信。谢谢你可以从xy=[w{k};oLmag{k}(i,:)]行中删除冒号,看看我想画什么……谢谢@Azim:wow,这很有效。非常感谢。非常感谢你的帮助。