如何在Matlab图中更改行的顺序?

33

在一个.fig文件中给定了三条曲线的图形,我想添加另一条曲线(使用hold allplot),但是将其放在已有的曲线之后(即确保最后一条原始曲线仍然处于前景)。是否可以实现这一点而无需提取绘图数据和重新绘制?

4个回答

54

如果你知道你想要置于顶部的行的句柄(例如因为你调用了 h = plot(...)),你可以使用 uistack

uistack(h,'top')

或者,您可以直接操作当前轴的子项顺序。以下代码将最后一条曲线置于顶部。

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

1
这个结果是否可以通过手动更改图形环境中曲线的顺序来获得?我尝试在“右键单击”菜单中查找相关内容,指向其中一个曲线...但是没有找到...提前感谢! - user1611107
@user1611107:关于Matlab的最新版本我不能确定,但在2016年之前是不可能的。 - Jonas
最后一个移到顶部可以使用一行代码实现(>= R2014b):axesHandle.Children = circshift(axesHandle.Children, 1); - j-hap

3

@Jonas提供的使用'Children'属性的分辨率在给定格式中无法工作。应该按照以下方式进行修改:

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

2
当图像有图例时,get(gca,...)set(gca,...)会导致错误:"使用set出错。子项只能设置为它本身的排列"。
在这种情况下,我使用了图形界面选择工具来选择轴对象,然后只使用所需的绘图进行获取和设置,而不是连同图例一起操作。在调用set之后,您需要通过调用legend(...)来刷新图例。我有5个需要重新排序的绘图。如果对顺序不确定,请每次排列两个绘图,刷新图例并查看是否是您想要的顺序。

2
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上测试通过


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接