2016-08-23 293 views
1

私はエントリの順番を変更したい(例えば、最初のエントリを3番目のエントリにする)Figureファイルを持っています。長い時間前にこのFigure.figを保存したので、元のコードを回復できるかどうかはわかりません。Matlab:Figure凡例のエントリの順番を変更

ここで私はあなたに私のプロットを示しています

My plot

私は伝説の要素は(絵のように)大きい順になりたいが、原因のミスに私の2番目のエントリが間違っを参照していますプロット(「25年」と表示されますが、プロットは実際には「9年」の傾向に対応する最低トレンドと呼ばれます)。

凡例のエントリの順序をMatlabの図のプロパティエディタから直接切り替えることはできますか?はいの場合、どのように(私は "注文"のプロパティなどを見ていない)?それ以外の場合は、凡例のエントリの順序を切り替えるための他の簡単な方法がありますか?

+0

数字を読み込むと、エントリの新しい順序で 'legend'をもう一度実行することはできませんか? –

+0

MATLABのどのバージョン? – excaza

+0

Matlab R2015b – Patapunfate

答えて

5

数字がR2014b以降で生成されている場合は、文書化されていない'PlotChildren'プロパティを使用して、新しいlegendコールを必要とせずに凡例エントリの順序を操作できます。例えば

x = 1:10; 
y1 = x; 
y2 = 2*x; 
y3 = 3*x; 
y4 = x.^2; 

plot(x, y1, x, y2, x, y3, x, y4); 
lh = legend('y = x', 'y = 2*x', 'y = 3*x', 'y = x.^2'); 

が生成されます

start

あなたがして操作することができ:

neworder = [3, 1, 4, 2]; 
lh.PlotChildren = lh.PlotChildren(neworder); 

を生産:

yay

あなたはlegendオブジェクトへのハンドルを持っていない場合、それはあなたのデータが上にプロットされaxesオブジェクトを含むfigureオブジェクトの子です。一般gcfは、ユーザーがクリックした最後の数字のハンドルを返しますが、これは必ずしも常にではないことを

% Handle to figure object known 
lg = findobj(figureobj, 'Type', 'legend'); 

% Handle to figure object unknown 
lh = findobj(gcf, 'Type', 'legend'); 

注:次findobjのいずれかの方法を使用してlegendオブジェクトへのハンドルを見つけることができます場合。


セルフプロモーション編集:このメソッドはStackOverflowのMATLABコミュニティによってlegend manipulation tools maintained on GitHubのセットに含まれています。

+0

'legend'をもう一度呼び出すのではなく、**文書化されていない**関数を使用する特別な理由はありますか? –

+1

@SembeiNorimakiは、ラインリストと凡例の間のリンクを維持するためです。 – excaza

+0

それは完全に動作します。大いに感謝する! – Patapunfate

2

R2014bより古いバージョンのMATLABを使用する場合は、出力をplotに指定してプロットオブジェクトのハンドルを取得することもできます。 legendに渡す前に、希望の順序でハンドルを並べ替えることができます。

x = 1:10; 
y1 = x; 
y2 = 2*x; 
y3 = 3*x; 
y4 = x.^2; 

hplots = plot(x, y1, x, y2, x, y3, x, y4); 
labels = {'y = x', 'y = 2*x', 'y = 3*x', 'y = x.^2'}; 

% Indices specifying the order in which you want the legend entries to appear 
neworder = [3 1 4 2]; 
legend(hplots(neworder), labels(neworder)); 

ファイルからロードするときに

が適切に処理するにはアップデートには、プロットオブジェクトを取得し、ラベルを取得するために、現在の凡例を取得するために、軸のChildrenの全てを取得することができます。上記の方法と同様に並べ替えることができます。

load('filename.fig'); 

labels = get(legend(), 'String'); 
plots = flipud(get(gca, 'children')); 

% Now re-create the legend 
neworder = [3 1 4 2]; 
legend(plots(neworder), labels(neworder)) 
関連する問題