我有一个图文件,我想改变条目的顺序(例如,把第一个条目作为第三条)。我很久以前就保存了这张图,所以我不确定是否可以恢复原始代码。Matlab:改变图例中条目的顺序
在这里,我告诉你我的阴谋:
我想传说元素是在递减的顺序(如图片),但由于错误我的第二项指的是错误的情节(它说“25年”,但情节实际上是指最低趋势,对应于“9年”趋势)。
我可以直接从图中的属性编辑器中切换图例中条目的顺序吗?如果是,如何(我没有看到任何“订单”财产或类似的)?否则,是否有其他简单的方法来切换图例中的条目顺序?
我有一个图文件,我想改变条目的顺序(例如,把第一个条目作为第三条)。我很久以前就保存了这张图,所以我不确定是否可以恢复原始代码。Matlab:改变图例中条目的顺序
在这里,我告诉你我的阴谋:
我想传说元素是在递减的顺序(如图片),但由于错误我的第二项指的是错误的情节(它说“25年”,但情节实际上是指最低趋势,对应于“9年”趋势)。
我可以直接从图中的属性编辑器中切换图例中条目的顺序吗?如果是,如何(我没有看到任何“订单”财产或类似的)?否则,是否有其他简单的方法来切换图例中的条目顺序?
如果您的图形是在R2014b或更新的版本中生成的,则可以利用未记录的'PlotChildren'
属性来操纵图例条目的顺序,而不需要新的legend
调用。
例如:
x = 1:10;
y1 = x;
y2 = 2*x;
y3 = 3*x;
y4 = x.^2;
plot(x, y1, x, y2, x, y3, x, y4);
lh = legend('y = x', 'y = 2*x', 'y = 3*x', 'y = x.^2');
产地:
然后你就可以操作:
neworder = [3, 1, 4, 2];
lh.PlotChildren = lh.PlotChildren(neworder);
生产:
如果没有句柄legend
对象,它是一个包含你的数据绘制在axes
对象figure
对象的孩子。您可以通过以下findobj
方法之一找到手感,以您的legend
对象:
% Handle to figure object known
lg = findobj(figureobj, 'Type', 'legend');
% Handle to figure object unknown
lh = findobj(gcf, 'Type', 'legend');
注意gcf
一般返回句柄到最后的数字,用户点击,但这并不一定总是案件。
自我宣传编辑:此方法是在由StackOverflow的MATLAB社区一组legend manipulation tools maintained on GitHub。
是否有一个特殊的原因,以避免再次调用'legend',而是使用**未记录**功能? –
@SembeiNorimaki,因为它维护线条系列和图例条目之间的链接。 – excaza
它完美地工作。万分感谢! – Patapunfate
对于那些使用比R2014b更早的MATLAB版本的用户,另一种方法是通过指定plot
的输出来检索绘图对象的手柄。然后,您可以在将它们传递到legend
之前按照您想要的顺序重新排列手柄。
x = 1:10;
y1 = x;
y2 = 2*x;
y3 = 3*x;
y4 = x.^2;
hplots = plot(x, y1, x, y2, x, y3, x, y4);
labels = {'y = x', 'y = 2*x', 'y = 3*x', 'y = x.^2'};
% Indices specifying the order in which you want the legend entries to appear
neworder = [3 1 4 2];
legend(hplots(neworder), labels(neworder));
更新
从文件加载时妥善处理,你可以得到所有轴的Children
来获得剧情对象并获得当前的传说得到的标签。然后,您可以按照上述方法重新排列它们。
load('filename.fig');
labels = get(legend(), 'String');
plots = flipud(get(gca, 'children'));
% Now re-create the legend
neworder = [3 1 4 2];
legend(plots(neworder), labels(neworder))
如果你加载图,难道你只是再次执行'legend'与条目的新顺序? –
什么版本的MATLAB? – excaza
这是Matlab R2015b – Patapunfate