50

およびなどのグラフィカルコマンドで(Emacsなどの)ウィンドウフォーカスを(外部エディターから)盗まないようにMatlabに指示する方法はありますか?これにより、データ(再)処理中にコード開発を継続したいことが多いため、生産性が大幅に向上します。figureplot

4

2 に答える 2

43

可能ですが、トリックは、figureステートメントを使用せずに、現在のfigureを直接変更することです。これにより、フォーカスを変更せずにアクティブなプロットが変更されます。通常、私は次のようなことをします。

function change_current_figure(h)
set(0,'CurrentFigure',h)

次に、すべてのfigure(h)ステートメントをchange_curent_figure(h)に変更する必要があります。

これはmatlabのドキュメントに含まれていることに注意してください。

これは、フィギュアがすでに作成されている場合にのみ機能することに注意してください。新しい図を定期的に作成する場合は、コードの最初の数行として図を作成し、ハンドルを保存して処理を実行してから、それらにプロットすることができます。この例はうまくいくでしょう。drawowコマンドはイベントバッファをフラッシュし、すべての図がプロットされていることを確認することに注意してください。

私は2007年から2010年までこの作品を見てきましたが、最新または以前のバージョンがこれをサポートしているかどうかはわかりませんが、サポートしていないと疑う理由はありません。

fig1=figure;
fig2=figure;
drawnow;
[a b]=do_complex_processing;
change_current_figure(fig1)
plot(a);
change_current_figure(fig2)
plot(b);
于 2011-12-13T13:13:04.337 に答える
4

同じ質問がありますが、コード作成の図が外部のサプライヤからのものであるという複雑さが増しており、変更したくありませんでした。Matlab 2014bでテストされた2つの可能性(MathWorksサポートの助けを借りて特定)は次のとおりです。

1.表示せずに図を生成し、コードの完了後に表示します

set(0, 'DefaultFigureVisible', 'off');

for i = 1:10
    fprintf('i: %g\n', i)
    figure;
    pause(1);
end

set(0, 'DefaultFigureVisible', 'on');
figHandles = findall(0, 'Type', 'figure');
set(figHandles(:), 'visible', 'on')

このコードは必要なことを正確に実行しますが、追加の不便さは、コード実行の進行状況を確認できないため、問題が発生した場合に長時間の実行を中断できないことです。

2.フィギュアをドッキングします

  1. 新しい図を作成します。

    figure
    
  2. ドッキング:

    ここに画像の説明を入力してください

    これにより、図がMatlabIDEウィンドウに表示されます。

  3. 新しいフィギュアをドッキングさせて、コードを実行します。

    set(0, 'DefaultFigureWindowStyle', 'docked');
    
    for i = 1:10
        fprintf('i: %g\n', i)
        figure;
        pause(1);
    end
    
    set(0, 'DefaultFigureWindowStyle', 'normal');
    
于 2016-02-25T16:48:04.860 に答える