以下似乎有效。
open example_figure.fig %// open old file in R2014b
ax = gca;
ch = ax.Children; %// the children are lines or other objects
co = ax.ColorOrder; %// this is the new set of colors
M = size(co,1);
p = 1; %// index of new color
for n = numel(ch):-1:1 %// start with lines plotted earlier. These have higher index
if strcmp(ch(n).Type,'line') %// we are only interested in lines
ch(n).Color = co(mod(p-1,M)+1,:); %// cycle through new colors
p = p + 1; %// increase color index
end
end
关键是,正如Loren 的博客所述,
绘图中使用的线条颜色由对象的ColorOrder
属性控制Axes
。
这是存储hold on
R2014b 中使用的新颜色的属性。但是这个属性适用于新绘制的线,而不是文件中已经存在的线。所以我上面的代码所做的是将定义的颜色应用于类型ColorOrder
为Children
的轴'line'
。
我观察到(至少在 R2010b 中)较新的地块在array中具有较低的索引children
。也就是说,当向坐标区添加新图时,它会获得数组中的第一个位置Children
,将旧图推到更高的索引。这就是为什么在for
上面的循环中,子索引 ( n
) 是下降的,而新颜色索引 ( p
) 是上升的。这确保了首先绘制的线(较高的索引)获得第一个新颜色等。
例如,让我们在 R2010b 中创建一个图形:
plot(1:3, 'b')
hold on
plot(4:6, 'r')
plot(7:9, 'g')
变换后的图是