2017-02-26 16 views
4

MATLABの凡例は、プロットのガイドラインなど、プロット内のすべてのものをリストします。それを回避するプロット内のいくつかのグラフィカルオブジェクトのMATLAB凡例エントリを非表示

ファッジは

*Plot 
*Add legend 
*Add guidelines 

しかし、MATLABは、表示されたデータの上に座って、その後ガイドラインを意味し、前に最新のラインを置くを行うことです。醜い、気を散らす。

同様の問題がlegendフリークアウト、あなたは複雑なプロットを構築する任意の時間を発生し、すべてをつかむ、と注文をプロットすると回避策は醜い

コード例になります

%**** Optional guidelines 
figure(1) 
plot([2 2],[0,1],'k--'); hold on 

%**** DATA 
N = 4; 
y=rand(5,N); 
x=1:1:5; 
for plotLoop=1:N; 
    %* Plot 
    figure(1) 
    plot(x,y(plotLoop,:)); 
    hold on 
end 

%*****LEGEND 
hLegend = legend(LegTxt,... 
       'interpreter','latex',... 
       'location','eastoutside') 

は(コードブロックを移動上記の状況を再現するために)

これを合理的に修正するにはどうすればよいですか?

+0

私はそれ少し作るためにタイトルを更新しましたより一般的な - それはガイドラインだけでなく、例えばあなたが凡例を表示したくない場合は – Jonas

答えて

6

したい場合は、特定のグラフィック伝説を生成しないために、オブジェクト(およびそれはあなたが伝説をオフに切り替えると、再びオンにしても動作します)、あなたはLegendInformationを変更することができます。

%# plot something that shouldn't show up as legend 
handleWithoutLegend = plot(something); 

%# modify the LegendInformation of the Annotation-Property of the graphical object 
set(get(get(handleWithoutLegend,'Annotation'),'LegendInformation'),... 
    'IconDisplayStyle','off'); 

%# toggle legend on and off at will, and never see the something-object appear 

あなたがしようとした場合ハンドルの配列に凡例をオフにし、最善の方法は、伝説を作ることができないグラフィカルオブジェクトのためのtry-のラッパーで、ちょうどそれらをループにある:

for h = listOfHandles(:)' 
    try 
     set(get(get(h,'Annotation'),'LegendInformation'),... 
     'IconDisplayStyle','off'); 
    end 
end 
+1

このコマンドを関数 "noLegend"などにパックすることをお勧めします。なぜなら私は正直なところ、それを覚えていないからです。 – Jonas

+0

私はこのコードを使って、 'get(bla、 'LegendInformation')'の ''セルから倍精度に変換できません。なぜなのかご存知ですか?私はコードが一部のグラフィックスオブジェクトでのみ動作すると仮定しますが、すべてではありません。 –

+0

@ Mark_Anderson:問題を解決するループソリューションを追加しました。 – Jonas

3

クラフトは、legendに入力するカスタムハンドルを作成します。プロットハンドルを連結して、凡例が入力として受け入れられるオブジェクトを形成することができます。

必要なコードはきれいではありませんが、機能します。衒学または好奇心のため

%**** Optional guidelines for periodicity 
figure(1) 
plot([2 2],[0,1],'k--'); hold on 

%**** DATA 
N = 4; 
y=rand(5,N); 
x=1:1:5; 

for plotLoop=1:N; 
    LegTxt{plotLoop} = num2str(plotLoop); 
    %* Plot 
    figure(1) 

    % if statement to construct a handle for the legend later 
    if plotLoop==1 
     htot=plot(x,y(plotLoop,:)); 
    else 
     h=plot(x,y(plotLoop,:)); 
     % Append this info to the figure handle 
     htot= [htot, h]; 
    end 
    hold on 

end 

%*****LEGEND 
hLegend = legend(htot,LegTxt,... 
       'interpreter','latex','FontSize',16,... 
       'location','eastoutside') 

Iは、データがセルアレイから抽出されたいくつかのかなり複雑なコードの例を抽出するので、ループfor plotLoop=1:N;はここにあります。明らかに、多くの使用シナリオでそのループをなくすことができました。私は、コードを最も柔軟な形式に保つことにしました。

+0

これは機能しますが、手作業で凡例をオフにしてから再びオンにすると、不要な項目が引き続き表示されます。幸いにも、別の解決策があります:http://stackoverflow.com/a/42471561/232610 – Jonas

+0

十分なほど、私はMATLABのマニュアルプロットインタラクションツールを使用していないので、問題を見つけられませんでした! –

関連する問題