0

質問:edgecolorコードの後半で数学的比較を行うことに基づいてすべてのバーを変更する方法(2 つのバーグラフ f3 と f4 があり、各バーグラフのバーの数は に依存しrowNosMaxSG、最大で 14 で構成されます) -棒)。

現在、変更のための以下の数学的 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

doublefromへの変換cellはできません。

再現可能なコード:

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

このエラーを解決するにはどうすればよいですか? 前もって感謝します。

4

2 に答える 2

0

バー自体のパッチ ハンドルをつかんでみましたか?

すべてのバーを個別の棒グラフとしてプロットする必要がある場合があります。このようなものがうまくいくかもしれません:

figure
hold on
for n = 1:10
bh(n) = bar(n,n);
end
set(get(bh(1),'Children'),'EdgeColor','r','FaceColor','w')
于 2013-02-15T16:29:34.337 に答える
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
于 2013-02-15T23:07:21.000 に答える