告诉MATLAB不要更新特定绘图的下一个默认颜色

And*_*uri 7 matlab plot colors

假设以下情况:

hold on 
plot(rand(1,20));
plot(rand(1,10));
plot(rand(1,20));
Run Code Online (Sandbox Code Playgroud)

MATLAB将绘制3条线,每条线都有一个默认颜色(例如红色,蓝色,黄色).

现在,由于第二个图更短,我想做以下事情:

hold on 
plot(rand(1,20));
pl=plot(rand(1,10));
plot(11:20,rand(1,10),'color',get(pl,'color') ...
  ,'LineStyle','--'); 
plot(rand(1,20)); 
Run Code Online (Sandbox Code Playgroud)

然而,虽然第3个图确实具有第二个图的颜色,但第4个图具有第4个默认颜色,而不是第3个.似乎MATLAB将更新下一个默认颜色顺序的索引,无论它是否正在使用它.

虽然我知道我可以做get(groot,'DefaultAxesColorOrder')所有默认颜色然后将每个绘图属性设置为我想要的索引,但我想知道是否有一种方法告诉M​​ATLAB "嘿,对于下一个绘图,不要更新那个默认颜色索引"

mat*_*gui 2

当您在轴上绘制时,未记录的轴变量用于控制使用颜色顺序中的值,我没有对它们进行太多探索,因此您需要更深入地探索才能完全理解它们的工作原理 - 但是本质上它们是:

ax = axes();
ax.ColorOrderIndex_I
ax.ColorOrderMode
Run Code Online (Sandbox Code Playgroud)

ColorOrderIndex_I更新您的示例(和一些数据 - 因为我发现它更容易查看) - 您可以在绘制“两条线连为一体”后从其中删除一个:

v1 = ones(20,1);
v2 = v1(1:10)+1;
v3 = v1+2;
figure;

ax = subplot ( 2, 1, 1 )
hold on 
plot(v1);
plot(v2);
plot(v3);
ax = subplot ( 2, 1, 2 );
hold on 
plot(v1);
pl=plot(v2);
plot(11:20,v2,'color',get(pl,'color')   ,'LineStyle','--'); 
ax.ColorOrderIndex_I = ax.ColorOrderIndex_I-1;
plot(v3); 
Run Code Online (Sandbox Code Playgroud)

上述脚本的输出如下所示

注意:使用未记录的功能 - 经过 r2015b 测试。

  • 为什么不使用[记录的属性](https://es.mathworks.com/help/matlab/ref/axes-properties.html?searchHighlight=colororderindex&s_tid=doc_srchtitle)`ColorOrderIndex`?只需在绘图之前设置“set(gca, 'ColorOrderIndex', get(gca, 'ColorOrderIndex')-1)”即可。或者更好的是`set(gca, 'ColorOrderIndex', mod(get(gca, 'ColorOrderIndex')-2, size(get(gca, 'ColorOrder'),1))+1)`来循环。抄送@AnderBiguri (4认同)