2011-10-10 71 views
3

我有一個典型的場景,其中有一個矢量X和矢量Y。向量X包含增加的值,例如X = [1 1 1 2 2 3 4 4 4 4 4]。向量Y包含與X相同大小的實際值。我想要繪製對於相應索引的X的每個不同值的顏色變化的索引V Y如何繪製不同間隔的顏色函數?

例如,對於前3個值爲1的圖應該有color1,對於接下來的2個值爲2的color2,對於1的值爲3的color3等等。

任何一個可以幫助我

+1

見http://stackoverflow.com/questions/2444575/plotting-multi-colored-line-in-matlab,它有幾點建議。 – mtrw

回答

4

大廈Laurent's answer和實施你的 「指數對y」 的要求,

function color_plot(data_vector, color_vector) 
styles={'ro','g.','bx','kd'}; 
hold off; 
for i=unique(color_vector) 
    thisIdx=find(color_vector==i); 
    thisY=data_vector(color_vector==i); 
    thisStyle=styles{mod(i-1,numel(styles))+1}; 
    plot(thisIdx,thisY,thisStyle); 
    hold on; 
end 
hold off; 

我的版本還允許arb大大的顏色指數;如果您沒有定義足夠的樣式,它只是迴繞並重新使用顏色。

更新注意我必須在計算上面修正一個符號哦thisStyle

X = [1 1 1 2 2 3 4 4 4 4 4]; 
Y=rand(size(X)) 
color_plot(Y,X) 

測試它現在給

enter image description here

+0

我喜歡你的代碼(它比我的代碼更緊湊!)。它顯示了段與線段之間的一些間隙(即'r-'風格)。 –

+0

正確 - 我的代碼不會嘗試加入單獨的段...如果它沒有,它將不會如此緊湊;-)。 –

3

一個plot()功能選項會更好(也許它存在)。

這裏有一個解決方法的功能做到這一點:

function colorPlot(data_vector, colors_vector) 
%PLOTCOL plots data_vector with colors found in colors_vector 

Styles=[{'r-'} {'g-'} {'b-'} {'k-'}]; 


last_off=0; 
last_data=0; 
for i=unique(colors_vector) 
    data_segment=data_vector(colors_vector==i); 
    len=length(data_segment); 
    if last_off==0 
     hold off; 
     plot(data_segment, 1:len,char(Styles(i))); 
     last_off=len; 
    else 
     plot([last_data data_segment],last_off:last_off+len,char(Styles(i))); 
     last_off=last_off+len; 
    end 
    last_data=data_segment(len); 
    hold on; 
end 
hold off; 
end 

這樣調用它:

colorPlot(Y,X); 
+0

修正了這個版本中的一些錯誤(顏色段現在是連續的,最終繪製值vs索引) –

+0

嗯...當有人說「情節」a「與」Y「」,你'a'在y軸上, Y軸在X軸上?我相反​​地理解它...... –

+0

@JonasHeidelberg「plot' a'對'Y'」,實際上是的,我假設'a'是縱座標,'Y'是absissa。 (但我不是母語,也許我錯了) –

相關問題