0

私が直面している小さな問題を解決するために、皆さんの助けが必要です。bar 関数を使用して f1 と f2 を描写したい場合、図の凡例タブで f2 注釈オブジェクトを除外する必要がありますが、以下に記述された set 構文では前述のエラーが発生するようです。

コードは次のとおりです。

f1= bar([SN, SN, SN], [Class_Work, Final_Exam, Shift_Grade'-Grade], K, 'stacked');

f2= bar([SN(idx), SN(idx), SN(idx)], [Class_Work(idx), Final_Exam(idx), SG(idx)-Grade(idx)], K*dy/dx, 'stacked', 'LineWidth', 2.5);  

set(f1,{'DisplayName'},{'Mid-Term','Final-Exam','Shift'}')
legend('location','NorthEast','Orientation','horizontal'); 

% in order to Exclude f2 indices from legend: (BUT SEEMS NOT WORKING based on error!)
set(get(get(f2,'Annotation'),'LegendInformation'),...
    'IconDisplayStyle','off');

実行後、正しい図を含むコマンド ウィンドウに次のエラーが表示されますが、すべての注釈オブジェクトが表示されます。

??? ==> get の使用エラー

cell から double への変換はできません。

==> set(get(get(f2,'Annotation'),'LegendInformation'),... のエラー

私が必要とする図は、 f2 を描画するときに、凡例タブのdata4、data5、および data6グラフィック オブジェクト (f2 に関連する) が表示されないようにすることです。

よろしくお願いします。

4

1 に答える 1

0

あなたの場合に役立つ凡例を呼び出す特別な構文があります。Matlab のドキュメントから:

 legend(h, 'string1', 'string2', ...);

ベクトル h のハンドルで識別されるオブジェクトを含む凡例をプロットに表示し、指定された文字列を使用して対応するグラフィックス オブジェクト (line、barseries など) にラベルを付けます。

したがって、あなたの場合、次のことを行う必要があります。

 legend(f1, 'Mid-Term', 'Final-Exam', 'Shift');

それに応じて、凡例の他のプロパティ (位置、方向など) を変更します。

アップデート:

または、最初のコードを機能させるには、次のようにする必要があります。

 annots = get(h,'Annotation');
 for i=1:length(annots)
     set(get(annots{i},'LegendInformation'),'IconDisplayStyle','off');
 end

annots = get(h,'Annotation')annots{i}はセル配列を返し、この配列の各セル (つまり ) を操作するだけです。

于 2013-02-14T09:17:17.653 に答える