2015-05-07 86 views
0

我一直試圖在for循環中調用時在Matlab中更改線屬性。自動系統ColorOrderLineStyleOrder已被證明是無用的,因爲它們不會同時指示。我需要更改每行的顏色和標記/線條樣式。最好的解決辦法,我發現它的:在Matlab圖中更改線屬性

hold on; 
col = hsv(5); 
mar = ['d','o','s','^','v','<','>']; 
beta = [1,2,3,4,5]; 

for m = 1:length(beta) 
    b = beta(m); 
    y=[]; 
    s = 0:05:8; 
    for m = s 
     y = [y integral(@(f)fun(m,b,f),0.0001,1000)]; 
    end 
    plot(s,y./y(1),'Marker',mar(m),'color',col(m,:),'DisplayName',num2str(b)) 
    legend('-DynamicLegend'); %automatically generate legend 
end 
hold off; 

如果我不得不遍歷測試,而不是測試本身的長度,以有顏色和標記的迭代器。然而,儘管這與文檔中描述的完全相同,但顏色和標記都不會改變。我懷疑有一些奇怪的互動正在進行,但我無法弄清楚它是什麼。有誰知道爲什麼這不會導致不同顏色和不同線條的標記?

回答

2

我在Matlab的早期版本中讀過的地方,我們無法同時調用plot期間的兩個屬性...我希望我有參考。無論如何,我正在使用R2013a,但它無法正常工作。

作爲一種解決方法,您可以在繪製完成後在之後指定一個句柄給單個繪圖並同時更改兩個屬性

換句話說,使用類似:

hPlot = plot(...) 
set(hPlot,'Marker',...,'Color',...,'LineStyle',...) 

與您的代碼,這將是這樣的:

clear 
clc 
close all 

hold on; 
col = hsv(5); 
mar = {'d','o','s','^','v'}; 
%// ======== NEW ========\\% 
linestyles = {'-' '--' ':' '-.' '-'} 
beta = [1,2,3,4,5]; 

%// Dummy function 
fun = @(x,y,z) x.*y-z; 

for m = 1:length(beta) 
    b = beta(m); 
    y=[]; 
    s = 0:05:8; 
    for m = s 
     y = [y integral(@(f)fun(m,b,f),0.0001,1000)]; 
    end 
    %// ======== NEW ========\\% 
    hPlot(b) = plot(s,y./y(1)); 

    set(hPlot(b),'Marker',mar{b},'color',col(b,:),'LineStyle',linestyles{b},'DisplayName',num2str(b)) 

    legend('-DynamicLegend'); %automatically generate legend 
end 
hold off; 

用下面的輸出:

enter image description here