2017-08-15 17 views
4

假定下面的情況:給MATLAB不更新下一個缺省顏色爲特定情節

hold on 
plot(rand(1,20)); 
plot(rand(1,10)); 
plot(rand(1,20)); 

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)); 

但是同時第三情節確實有第二個圖的顏色,第四圖有4默認顏色,而不是第三。似乎MATLAB會更新下一個默認顏色順序的索引,無論它是否使用它。

雖然我知道我可以做get(groot,'DefaultAxesColorOrder')獲取所有的默認顏色,然後將每個圖屬性設置爲我想要的索引,但我想知道是否有辦法告訴MATLAB 「嘿,對於下一個陰謀,不要更新該默認顏色索引「

回答

2

當你在一個座標軸上繪圖時,一個未記錄的座標軸變量用於控制顏色順序中的值,我沒有深入探索它們,所以你需要以更深入地探索以充分理解它們的工作原理 - 但實質上它們是:

ax = axes(); 
ax.ColorOrderIndex_I 
ax.ColorOrderMode 

更新您的例子(數據一點 - 因爲我發現它更易於查看) - 你可以從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); 

output of above script shown below

注:使用未經記錄的功能測試r2015b。不依賴於任何無證功能

+0

現貨:如果您繪製與line第三行,這不增加由plot使用的顏色順序索引你應該得到你想要的結果!適用於2014b –

+2

爲什麼不使用[記錄的屬性](https://es.mathworks.com/help/matlab/ref/axes-properties.html?searchHighlight=colororderindex&s_tid=doc_srchtitle)'ColorOrderIndex'?只需在plot之前設置(gca,'ColorOrderIndex',get(gca,'ColorOrderIndex') - 1)'。或者更好的是set(gca,'ColorOrderIndex',mod(get(gca,'ColorOrderIndex') - 2,size(get(gca,'ColorOrder'),1))+ 1)'循環。 Cc @AnderBiguri –

+0

@LuisMendo爲什麼不確實...... :)有時答案是正確的你面前.... – matlabgui

3

一種解決方案是使用更原始line功能產生一些您的情節,而不是上級plot功能。在

hold on; 
plot(rand(1, 20)); 
hp = plot(rand(1, 10)+1); 
line(11:20, rand(1, 10)+1, 'Color', get(hp, 'Color'), 'LineStyle', '--'); 
plot(rand(1, 20)+2); 

enter image description here