MATLAB copyobj会颠倒对象的顺序吗?

时间:2016-10-23 19:59:29

标签: matlab matlab-figure

我正在调试一个大型图形项目,最后将问题减少到以下MWE中。不知怎的,MATLAB的copyobj在将图形对象复制到新图形时会反转图形对象的顺序。

X = [1 2; 4 4];
Y = [2 -4; -4 2];
figure;
hold on;
colors = [1 0 0; 0 1 0];
lines  = [];
for idx = 1:size(X, 2)
    l = plot(X(:, idx), Y(:, idx), 'Color', colors(idx, :), 'linewidth', 10);
    lines = [lines l];
end
hold off;

给出

enter image description here

正如预期的那样,后面绘制的绿线位于红线上方。然后我将这两行复制成一个新的数字。

figure;
a = axes;
copyobj(lines, a);
view(a);

给出

enter image description here

现在红色在果岭上方。

有人知道这背后的原因吗?为了使订单正确,我可以反转对象顺序吗?

1 个答案:

答案 0 :(得分:2)

copyobj以相反的顺序复制对象。
要获得正确的订单,请使用copyobj(lines(end:-1:1), a);copyobj(fliplr(lines), a);代替copyobj(lines, a);

对您的代码提出建议:
而不是在每次迭代时增加lines的大小, pre-allocate ,如下所示:

lines = gobjects(1,2);
for idx = 1:size(X, 2)
    lines(idx) = plot(X(:, idx), Y(:, idx), 'Color', colors(idx, :), 'linewidth', 10);
end

阅读gobjects()Graphics Arrays的文档了解详情。

如果您不需要使用循环,则只需使用以下内容:

% Following is to set the Colors that you specified
set(gca, 'ColorOrder', colors);
% Now plotting the data 
lines = plot(X,Y,'linewidth',10 );