2012-04-12 8 views
11

のプロット私は、私はいくつかの理由のために、数回実行する必要がMATLABで書かれたいくつかのプログラム持っている(などのデバッグ、異なる入力でテストを、...)無効にMatlabの

しかし、多くのそのグラフのがあります私はプログラムを実行するたびに、すべてのグラフが表示されるのを待たなければならないなど、プログラムとそのさまざまな機能によってプロットされています。これは非常に面倒で時間がかかります(特に小さなノートパソコンを使用している場合)。 プログラムの実行後、私はclose allでそれらを閉じます。

だから私の質問は次のとおりです。

は、MATLABでのすべてのプロット/フィギュア/グラフを無効にする方法はありますか?をオプションで使用するか、数字が表示されないようにdisable plotenable plotのような特定のコードを実行してください。

私はコードを閲覧してプロット部分をコメントするだけでよいことを知っていますが、私はしたくないです。コメントを外すにはを忘れてしまいます。

答えて

13

は、二つのコマンドのいくつかの組み合わせ試してみてください。

set(gcf,'Visible','off')    % turns current figure "off" 
set(0,'DefaultFigureVisible','off'); % all subsequent figures "off" 

秒1を、あなたのプログラムの先頭近くに置く場合は、あなたのためのトリックを行う可能性があります。もちろん、計算時間やRAMの問題には望ましくないかもしれないプロットを作成しています。

これはMatlabを回避するための古典的な理由です。それは悪いプログラミングデザインを育成します。この問題を正しく解決するには、プログラムの最上位レベルでスイッチを反転させ、プロットを表示するかどうかを制御できるようなものを作成する必要があります。おそらく、表示/表示しないオプションのグラデーションもあるので、実行している診断に応じて表示/非表示するさまざまな種類のプロットを選択できます。

理想的には、この「フリップスイッチ」の作成は、他のオブジェクトの可視性とプロット機能にアクセスできるクラスにすることをお勧めします。しかし、Matlabではインタラクティブなオブジェクト指向が非常に煩雑であるため、そのようなソリューションを開発する努力をする価値はないことが多く、ほとんどの人はプロジェクトの当初からこのデザインの側面について考えることはありません。

Matlabは、誰かが "isPlotVisible"などのフラグ変数を作成し、そのようなフラグを常に受け​​入れる関数を作成することで、この問題を解決するよう勧めます。私はこれが悪いデザインだと思います。

+0

ああ、いいね。それらについて知りませんでした。 – Richante

+0

同じことがOctaveでもうまくいきます。なぜなら、プロットはOctaveが普通のMatlabの機能とは通常異なる方法の1つなので、これは驚くべきことです。 – ely

+2

'set(0、 'DefaultFigureVisible'、 'off');は完璧です! プログラムのパフォーマンスが大幅に向上しました。それは、実際の計算を実際に行うよりも、数字のウィンドウを作成する時間を増やすようなものでした。 – Mesop

3

あなたはしてコマンドラインからMATLABを実行できます。

matlab -nojvm 

が、その後、あなたは、すべてのGUIを得ることはありません。あるいは、 'plot.m'というファイルを書くことができます。

これは何もしません。これが作業ディレクトリ(またはパスの最上部にある他の場所)にある場合、plotは '実際の'プロットの代わりに関数を呼び出します。呼び出す他のグラフ関数から同じことを行う必要があります。

私が「プロットをオフにする」ことがわかっている最も近い方法は、プロットを無効にするためにパスに追加できるような機能のフォルダになり、有効にするために削除します。

+1

私は最近、[Doug Hull Cry](http://blogs.mathworks)と答えるために誰かを罵倒して以来、ひどいです(意図的にMATLABビルトインを隠していますか?) –

+0

うん、 .com/videos/2010/03/08/top-10-matlab-code-practices-make-me-cry /) – Richante

+0

私はそれを見ました。 ;) –

0

以前の方法は問題ありませんでしたが、取るのは簡単であり、良い習慣は"on/off parameter"です。上記...(コマンドはif文の内側にある必要があり、すべてのプロットに関連するコマンド、のため"if DisplayFigure == 1 ... end"を追加し、その後

DisplayFigure = 1; %1 = display, 0 = no display 

:だから、基本的に、あなたのコードの冒頭で、あなたのような何かを追加することができます)。したがって、プロットを計算することさえありません。これは、あなたに多くの時間とメモリを節約します。変数 "DisplayFigure"の値をプロットするかどうかに変更するだけです。

関連する問題