【问题标题】:Several graphs in 1 loop, each iteration adds a line on every figure1个循环中的几个图,每次迭代在每个图上添加一条线
【发布时间】:2012-08-26 22:26:05
【问题描述】:

尝试在 Matlab 中设计以下内容:

** loop start;
   y(:,i) = function of x;
   z(:,i) = function of x;
   plot(x,y(:,i))   on figure 1, hold all;
   plot(x,z(:,i))   on figure 2, hold all;
** loop end;
   add title, legend, etc for figure 1 (NB: we have multiple lines);
   add title, legend, ets for figure 2 (NB: same, have multiple lines for the legend);`

尝试了多种组合,但运气不佳。设法获得 2 个数字,但只有 2-nd 显示多行,而不是第一行。并且无法弄清楚如何正确地为这两个添加图例。

【问题讨论】:

    标签: matlab plot legend figure axes


    【解决方案1】:

    为每个图形和每个轴对象保存一个句柄:

    fh1 = figure;
    hold all;
    ah1 = gca;
    
    fh2 = figure;
    hold all;
    ah2 = gca;
    
    for i=1:N
        y(:,i) = function of x;
        z(:,i) = function of x;
        plot(ah1, x, y(:,i)); %# tell it which axis to use (ah1)
        plot(ah2, x, z(:,i)); %# (ah2)
    end
    
    legend(ah1, ...) %# legend options here
    legend(ah2, ...) %# and the other legend
    
    %# note: you can set figure properties for each using fh1, fh2 handles.
    

    【讨论】:

    • 效果很好。如果您有机会回答 - 为什么可以将“全部保留”放在循环前面?我也处理过,显然 2-nd “hold all” 丢失或在错误的地方。
    • "hold all" 适用于当前坐标区。如果坐标区对象不存在,则会创建一个。这就是为什么它在你绘制任何东西之前就起作用的原因。
    • 应该如何“推迟”?类似图(1)的东西;暂缓;图(2);推迟;
    • 来自documentationhold off 将保持状态重置为默认行为,其中 MATLAB 会在绘制新图之前清除现有图形并将坐标区属性重置为默认值。
    • 好吧,不像我想摆脱我所有的线条,但理论上一旦我在两个数字上都激活了“等待”,我“需要”(或可能想要)在两个数字上都停用它也。我看不到如何使用 'ah1' 和 'ah2' 来实现这种去激活 => 因此问题。
    【解决方案2】:

    你可以这样做:

    figHandle1 = figure(1);
    figHandle2 = figure(2);
    

    然后,当您想在该图上绘图时,请执行以下操作:

    figure(figHandle1) %Plot on figure 1
    %ie plot(someStuff)
    figure(figHandle2) %Plot on figure 2
    

    标题和内容也一样,你只需要通过这样做来识别哪个数字:

    figure(handle);
    

    希望这会有所帮助。

    【讨论】:

    • figure(h) 将把句柄 h 放在前面,所以新的东西被放入图中 - 所以,这将起作用。但是,它比仅通过将句柄提供给 plot 命令(即我在回答中所做的)来指定要使用的句柄要慢得多。如果您经常切换数字(就像 OP 所做的那样,每次循环两次),这可能很重要。
    • @tmpearce 我不知道,但是谢谢,希望 OP 没有运行那么多循环。
    • 我以前试过这个,刚才又试了一次。结果——图 1 上的 1 行和图 2 上的 10 行。我不愿意将所有代码放在这里,因为函数非常复杂。但是,如果我“杀死”图 2 并要求仅绘制图 1,那么一切正常,那么所有 10 行都在那里。
    • 其实我刚刚发现了这个bug:在循环内的每个情节之后应该有两次“全部保留”。
    猜你喜欢
    • 2017-04-28
    • 2019-11-28
    • 1970-01-01
    • 2020-09-25
    • 2014-06-18
    • 2021-10-29
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    相关资源
    最近更新 更多