将标准颜色从旧颜色图转换为新颜色图

Convert the standard colors from the old colormap to the new one

如果我打开以前(R2014b之前)保存的图形,我使用的颜色,例如 rk ……将根据它们的颜色图显示已保存。将颜色转换为新颜色图中等效颜色的快速方法是什么 parula。 等效颜色是指当我们在每个 plot 命令后使用 hold on 命令时 MATLAB 使用的标准颜色序列,而不在“绘图”中设置颜色 属性。像这样:

plot(x,y1);hold on;plot(x,y2);

如果我更改绘图的默认颜色图,它应该是非常自动的,但事实并非如此。有相关命令吗?

我的绘图,每个绘图都包含 20 多条曲线,手动更改颜色很烦人。

以下似乎有效。

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's blog所述,

The line colors used in plots are controlled by the ColorOrder property of the Axes object.

这是存储 R2014b 中使用的新 hold on 颜色的 属性。但是这个 属性 适用于新绘制的线条,不适用于文件中已经存在的线条。所以我上面的代码所做的是将 ColorOrder 定义的颜色应用到 'line'.

类型的轴的 Children

我观察到(至少在 R2010b 中)较新的地块在 children 数组 中具有较低的索引。也就是说,当将新图添加到坐标区时,它会在 Children 数组中获得 第一个位置 ,将旧图推向更高的索引。这就是为什么在 for 循环中,子索引 (n) 递减,而 new-color 索引 (p) 递增。这确保首先绘制的线条(较高的索引)获得第一个新颜色等。

例如,让我们在 R2010b 中创建一个图形:

plot(1:3, 'b')
hold on
plot(4:6, 'r')
plot(7:9, 'g')


转换后的数字是