【发布时间】:2011-10-06 13:12:43
【问题描述】:
鉴于 .fig 文件中的三个曲线图,我想添加另一个图(使用 hold all 和 plot),但将它放在 已经存在的曲线之一之后(即确保最后一条原始曲线保持前景曲线)。无需提取绘图数据并重新绘图就可以实现这一点吗?
【问题讨论】:
标签: matlab sorting plot append figure
鉴于 .fig 文件中的三个曲线图,我想添加另一个图(使用 hold all 和 plot),但将它放在 已经存在的曲线之一之后(即确保最后一条原始曲线保持前景曲线)。无需提取绘图数据并重新绘图就可以实现这一点吗?
【问题讨论】:
标签: matlab sorting plot append figure
如果您知道要放在顶部的线句柄(例如,因为您调用了h = plot(...),则可以使用uistack
uistack(h,'top')
或者,您可以直接操纵当前坐标区的子坐标区的顺序。下面将最后一条曲线放在顶部。
chH = get(gca,'Children')
set(gca,'Children',[chH(end);chH(1:end-1)])
【讨论】:
axesHandle.Children = circshift(axesHandle.Children, 1);
@Jonas 使用'Children' 属性给出的分辨率在其给定格式下不起作用。修改如下:
chH = get(gca,'Children')
set(gca,'Children',flipud(chH))
【讨论】:
当图像有图例时,get(gca,...) 和 set(gca,...) 对会导致错误:“使用 set 时出错。子级只能设置为自身的排列”
在这种情况下,我使用图形的 GUI 选择工具来选择轴对象,然后根据需要仅使用绘图而不是图例来获取和设置工作。调用 set 后,您必须通过调用 legend(...) 来刷新图例。我有 5 个地块需要重新排序。当不确定顺序时,一次置换两个图,刷新图例,看看这是否是您想要的顺序
【讨论】:
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 上测试
【讨论】: