2013-02-15 53 views
0

問題:如何根據稍後在代碼中進行數學比較(我們有兩個條形圖f3和f4,每個條形圖編號的酒吧取決於rowNosMaxSG,其中最多它將由14個酒吧組成)。在每條if語句後修改每條邊緣顏色

目前下面的數學if語句更改edgecolor,不幸的是,在每個3-if語句執行後,我都會遇到邊緣顏色重疊,並且此重疊會影響每個圖的整個條,而我想要根據數學比較能夠控制每個條形圖中每個單條的edgecolor

截斷代碼(包括數學,比較):

f3= bar(SN, Shift_Grade', 'stacked', 'FaceColor', 'white'); 
    f4= bar(SN(Shift_Gradey ~= 0), Shift_Gradey(Shift_Gradey ~= 0),... 
     'stacked', 'FaceColor', 'white', 'EdgeColor','green',... 
     'LineWidth', 2); 
%---------------- **Mathematical-Comparison (3-if-statements)** -------------------- 
    if (SN(Shift_Grade' <= 11.3) 
     set(f3, 'EdgeColor', 'r') 
    end 
    if ( SN(11.3 < Shift_Grade') & SN(Shift_Grade' < 16)) 
     set(f3, 'EdgeColor', 'y') 
    end 
    if (SN(Shift_Grade' >= 16)) 
     set(f3, 'EdgeColor', 'g') 
     set(f4, 'EdgeColor', 'g') 
    end 
set(gca, 'Xtick', 1:2:length(SN)+1) 
set(gca,'YLim',[0 20]) 
set(gca,'XLim',[0 length(SN)+1]) 

希望有一個清晰和明確的答案來解決這個問題是阻礙我的進步。感謝您的時間提前。


好主意Doresoom,我不知道那個。我已經實現了你的想法,但我仍然得到下面的代碼這個錯誤:

???錯誤使用==>set

cell轉換爲double是不可能的。

可重複碼:

SN= [1:14]'; 
SG= [15.5; 13; 15; 12.2; 13.6; 13.4; 14.2; 9; 17.7; 15; 12.5; 10; 16; 13.6]; 
SN_UnderDogs= [8; 12]; 
SN_Mediocre= [1; 2; 3; 4; 5; 6; 7; 10; 11; 14]; 
SN_Top= [9; 13]; 

for cc = 1:length(SN) 
    f3(cc) = bar(cc, SG(cc), 'FaceColor', 'white'); 
end 

if SN(SG <= 11.3) 
    for SNUD = SN_UnderDogs (1 : length (SN_UnderDogs)) 
     set(get(f3(SNUD),'Children'),'EdgeColor','r') 
    end 
end 
if SN(11.3 < SG & SG < 16) 
    for SNM = SN_Mediocre (1 : length (SN_Mediocre)) 
     set(get(f3(SNM),'Children'),'EdgeColor','y') 
    end 
end 
if SN(SG >= 16) 
    for SNT = SN_Top (1 : length (SN_Top)) 
     set(get(f3(SNT),'Children'),'EdgeColor','g') 
    end 
end 

我該如何解決這個問題?提前致謝。

+0

你可能包括什麼是目前發生的事情,什麼它實際上應該看起來像一個形象呢? – 2013-02-15 12:15:43

+0

很抱歉,我無法上傳圖片,因爲我對這個網站不熟悉,因爲我沒有足夠的聲望。但是,我已經解釋了第二段中發生了什麼。如果有什麼不清楚請讓我知道,所以我進一步解釋。 – Hans 2013-02-15 13:02:47

+0

也許你可以使用'bar(1:10,1:12:120)'或類似的東西來製作一個可重複使用的小例子。 – 2013-02-15 13:10:43

回答

0

試試這個:

SN= [1:14]'; 
SG= [15.5; 13; 15; 12.2; 13.6; 13.4; 14.2; 9; 17.7; 15; 12.5; 10; 16; 13.6]; 
SN_UnderDogs= [8; 12]; 
SN_Mediocre= [1; 2; 3; 4; 5; 6; 7; 10; 11; 14]; 
SN_Top= [9; 13]; 

for cc = 1:length(SN) 
    f3(cc) = bar(cc, SG(cc), 'FaceColor', 'white'); 
    hold on; 
end 

if SN(SG <= 11.3) 
    for SNUD = SN_UnderDogs (1 : length (SN_UnderDogs)) 
     % set(get(f3(SNUD),'Children'),'EdgeColor','r') 
     cellfun(@(x) set(x,'EdgeColor','r'), get(f3(SNUD),'Children')) 
    end 
end 
if SN(11.3 < SG & SG < 16) 
    for SNM = SN_Mediocre (1 : length (SN_Mediocre)) 
     % set(get(f3(SNM),'Children'),'EdgeColor','y') 
     cellfun(@(x) set(x,'EdgeColor','y'), get(f3(SNM),'Children')) 
    end 
end 
if SN(SG >= 16) 
    for SNT = SN_Top (1 : length (SN_Top)) 
     % set(get(f3(SNT),'Children'),'EdgeColor','g') 
     cellfun(@(x) set(x,'EdgeColor','g'), get(f3(SNT),'Children')) 
    end 
end 
+0

給出:???錯誤使用==>'得到' 無效的句柄對象。 – Hans 2013-02-15 23:14:52

+0

嗯,我想你叫'hold on'然後再進行所有bar調用 - 否則第二篇文章中的代碼會以同樣的方式崩潰。不過,我在我的文章中修復了代碼,希望它有幫助。 – miy 2013-02-15 23:32:47

+0

Bravo!你再次拯救了我的一天!Thumbs-向上。 – Hans 2013-02-15 23:41:57

0

你試過抓住酒吧自己的補丁句柄嗎?

您可能必須將所有條形圖繪製爲單獨的條形圖。 像這樣的東西可能會奏效:

figure 
hold on 
for n = 1:10 
bh(n) = bar(n,n); 
end 
set(get(bh(1),'Children'),'EdgeColor','r','FaceColor','w') 
+0

豎起大拇指,因爲我已經利用你的想法。也感謝用戶** miy **解決了這個問題。 – Hans 2013-02-15 23:44:23

+0

噢,我看到我不能打勾超過一個答案:(我會在下次做。謝謝 – Hans 2013-02-15 23:51:53