2011-09-26 11 views
8

私は対話モードでmatplotlibを使用して、ユーザーが一連の変数を入力するのに役立つプロットを表示しています。彼らには「?」と打つという選択肢があります。このプロットを表示すると、変数の入力が繰り返されます。matplotlib interactive mode:Figureウィンドウがまだ表示されているかどうかを確認します

このプロットがまだ表示されている場合は、再描画しないことをどのように知っていますか?

answer = None 
done_plot = False 
while answer == None: 
    answer = get_answer() 
    if answer == '?': 
     if done_plot: 
      have_closed = True 
      ##user's already requested a plot - has s/he closed it? 
      ## some check here needed: 
      have_closed = ????? 

      if have_closed == False: 
       print 'You already have the plot on display, will not re-draw' 
       answer = None 
       continue 
     plt.ion() 
     fig = plt.figure() 
     ### plotting stuff 
     done_plot = True 
     answer = None 
    else: 
     ###have an answer from the user... 

は、私は私がする必要があるかどうかを判断する(plt.gca()、イチジク等...の面で)何を使用することができます。

は表面的に、私はこの不格好(擬似っぽい)のコードを持っています再プロット?確認できる状態がありますか?

多くのおかげで、

デビッド

unutbuの答えと同じ静脈で
+0

質問にはもっと明快さが必要だと思います。彼らが開いた数字を把握していますか?一度に複数の図形を開くことができますか? –

答えて

12

は、あなたはまた、与えられた数字はまだ

import matplotlib.pyplot as plt 

if plt.fignum_exists(<figure number>): 
    # Figure is still opened 
else: 
    # Figure is closed 

での図番号を開いているかどうかを確認することができます数字はfig.numberです。

PS:「figure(num=…)」の「番号」は、実際には文字列である可能性があることに注意してください。これはウィンドウタイトルに表示されます。ただし、数値にはnumberという属性があります。元の文字列numfignum_exists()で使用できません。

PPS:subplots(…, num=<string num>)が適切に与えられた文字列数と既存のフィギュアを回復、と述べました。したがって、Matplotlibのいくつかの部分では文字列番号によって数字がわかります(しかし、fignum_exists()はそのような文字列を使用しません)。

7
import matplotlib.pyplot as plt 
if plt.get_fignums(): 
    # window(s) open 
else: 
    # no windows 
+2

'matplotlib.pyplot.get_fignums()'は追加のインポートをしなくてもほぼ同じことをします。 – Avaris

+0

@Avaris:ありがとうございます。 – unutbu

関連する問題