“儿童”一般是颠倒了吗? Matlab的

时间:2016-10-01 07:59:16

标签: matlab matlab-figure children axes

我有一个如此处所示的图形,每种颜色都表示第三个变量的值。我尝试使用相应的颜色和值创建colorbar。为此,首先get Color轴的'Children'如下:

curves = get(gca, 'Children');
mycolorset = cat(1, curves(:).Color);

然后我意识到颜色的顺序(与Children的顺序相同)与绘图顺序相反。因此,我必须将flipud应用于颜色以制作正确的色彩映射:

set(gcf, 'Colormap', flipud(mycolorset));

有趣的是, Plot Browser 以正确的顺序显示曲线。

现在我想知道,这是否是Matlab中所有Children的通用特性要反转?你知道这个案件有用吗?

enter image description here

1 个答案:

答案 0 :(得分:2)

订购Children的{​​{1}},以便开头附近的孩子显示在孩子列表末尾附近的孩子的顶部(如果SortMethod is set to 'childorder'或者如果你只有2D图。)

如果要动态地将多个2D绘图添加到axes,MATLAB的默认行为是将新绘图对象放在旧绘图对象之上,因此需要将它们附加到{的开头。 {1}}列表。

axes

enter image description here

如果您想要更改哪个图表显示在其上,您可以修改Children的顺序,或者您可以使用方便的uistack命令为您执行此操作。

figure;
hold on
plot1 = plot(1:10, 'LineWidth', 10, 'DisplayName', 'plot1');
plot2 = plot(10:-1:1, 'LineWidth', 10, 'DisplayName', 'plot2');
legend([plot1, plot2])

get(gca, 'Children')

%  2x1 Line array:
%
%  Line    (plot2)
%  Line    (plot1)

enter image description here

此堆叠行为不仅限于Children中的绘图对象。您可以更改大多数UI元素的set(gca, 'Children', flipud(get(gca, 'Children'))) % Or uistack(plot1, 'top') get(gca, 'Children') % 2x1 Line array: % % Line (plot1) % Line (plot2) 排序(包括axesChildren等),以确定元素的可视堆叠。