【问题标题】:Plot a data series beneath another one在另一个数据系列下方绘制一个数据系列
【发布时间】:2008-10-16 05:00:07
【问题描述】:

当您在 Matlab 中绘制内容时,最近绘制的数据系列将放置在已经存在的内容之上。例如:

figure; hold on
plot(sin(linspace(0,pi)),'linewidth',4,'color',[0 0 1])
plot(cos(linspace(0,pi)),'linewidth',4,'color',[1 0 0])

在这里,红线显示在蓝线的顶部(它们相交的地方)。有什么方法可以设置画线的“深度”,以便您可以绘制下面已经存在的东西?

【问题讨论】:

    标签: matlab plot


    【解决方案1】:

    使用 uistack 命令。例如:

    h1 = plot(1:10, 'b');
    hold on;
    h2 = plot(1:10, 'r');
    

    将绘制两条线,红线绘制在蓝线之上。如果你这样做:

    uistack(h1);
    

    蓝线将被带到前面。

    【讨论】:

    • 谢谢,我也不知道这个。相反, uistack(h2,'bottom') 会将红线发送到底部,这正是我所追求的。
    • @Will - 好点。致 OP:uistack 还有一些其他输入参数,允许对堆叠顺序进行更复杂的调整。你可以通过在命令行输入“help uistack”来了解这些。
    【解决方案2】:

    您也可以通过设置当前坐标区的子向量的顺序来完成此操作。如果您执行以下操作:

    figure; hold on
    h1 = plot(sin(linspace(0,pi)),'linewidth',4,'color',[0 0 1]);
    h2 = plot(cos(linspace(0,pi)),'linewidth',4,'color',[1 0 0]);
    h = get(gca, 'Children');
    

    你会看到 h 是一个包含 h1 和 h2 的向量。图形堆叠顺序由句柄在 h 中的顺序表示。在此示例中,要反转堆叠顺序,您可以执行以下操作:

    h = flipud(h);
    set(gca, 'Children', h);
    

    【讨论】:

    • 最后,我认为编写一个有用的函数最终会重新实现 uistack :) 好点,不过。
    • 这种方法对我来说比使用 uistack 快几个数量级。执行时间从 15 分钟缩短到不到一秒。
    猜你喜欢
    • 1970-01-01
    • 2016-09-10
    • 2011-03-15
    • 2018-07-11
    • 2021-10-26
    • 2022-12-05
    • 2022-12-14
    • 2011-02-18
    • 2016-04-16
    相关资源
    最近更新 更多