1

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

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

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

我拥有的图,每一个都包含超过 20 条曲线,这使得手动更改颜色很烦人。

4

1 回答 1

0

以下似乎有效。

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 onR2014b 中使用的新颜色的属性。但是这个属性适用于新绘制的线,而不是文件中已经存在的线。所以我上面的代码所做的是将定义的颜色应用于类型ColorOrderChildren的轴'line'

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

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

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

在此处输入图像描述
变换后的图是

在此处输入图像描述

于 2015-01-28T22:25:55.233 回答