【问题标题】:How to change the order of lines in a Matlab figure?如何更改 Matlab 图中线条的顺序?
【发布时间】:2011-10-06 13:12:43
【问题描述】:

鉴于 .fig 文件中的三个曲线图,我想添加另一个图(使用 hold allplot),但将它放在 已经存在的曲线之一之后(即确保最后一条原始曲线保持前景曲线)。无需提取绘图数据并重新绘图就可以实现这一点吗?

【问题讨论】:

    标签: matlab sorting plot append figure


    【解决方案1】:

    如果您知道要放在顶部的线句柄(例如,因为您调用了h = plot(...),则可以使用uistack

    uistack(h,'top')
    

    或者,您可以直接操纵当前坐标区的子坐标区的顺序。下面将最后一条曲线放在顶部。

    chH = get(gca,'Children')
    set(gca,'Children',[chH(end);chH(1:end-1)])
    

    【讨论】:

    • 是否也可以通过在图形环境中手动更改曲线顺序以某种方式获得此结果?我试图简单地在“右键单击”菜单中找到一些关于它的东西,指向其中一条曲线..什么也没找到..提前谢谢!
    • @user1611107: 不能说最新版本的 Matlab,但到 2016 年为止,这是不可能的。
    • 最后一个到顶部可以作为一个单线 (>= R2014b):axesHandle.Children = circshift(axesHandle.Children, 1);
    【解决方案2】:

    @Jonas 使用'Children' 属性给出的分辨率在其给定格式下不起作用。修改如下:

    chH = get(gca,'Children')
    set(gca,'Children',flipud(chH))
    

    【讨论】:

      【解决方案3】:

      当图像有图例时,get(gca,...)set(gca,...) 对会导致错误:“使用 set 时出错。子级只能设置为自身的排列” 在这种情况下,我使用图形的 GUI 选择工具来选择轴对象,然后根据需要仅使用绘图而不是图例来获取和设置工作。调用 set 后,您必须通过调用 legend(...) 来刷新图例。我有 5 个地块需要重新排序。当不确定顺序时,一次置换两个图,刷新图例,看看这是否是您想要的顺序

      【讨论】:

        【解决方案4】:

        Children 属性保存引用,顺序决定图形堆栈。

        另一个如何检索列表的选项是

        gcaChildrenList=gca.Children;
        

        这样你就可以玩像这样的订单了

        gca.Children=gca.Children([2:end 1]);         % Put the topmost graphic in the bottom
        gca.Children=gca.Children([end:-1:1]);        % Flip the stack
        gca.Children=gca.Children([1:N-1 N+1:end N]); % Put Nth graphics ontop the stack
        

        在 Matlab R2014b 上测试

        【讨论】:

          猜你喜欢
          • 2016-12-30
          • 2018-03-13
          • 1970-01-01
          • 1970-01-01
          • 2017-06-03
          • 1970-01-01
          • 2020-05-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多