2011-09-26 26 views
8

Tôi đang sử dụng matplotlib ở chế độ tương tác để hiển thị cho người dùng một âm mưu sẽ giúp họ nhập một loạt các biến. Họ có tùy chọn đánh "?" để hiển thị cốt truyện này và lời nhắc cho các biến sẽ được lặp lại.chế độ tương tác matplotlib: xác định xem cửa sổ con số vẫn được hiển thị

Làm cách nào để biết không vẽ lại cốt truyện này nếu nó vẫn đang được hiển thị?

Bề ngoài, tôi có vụng về này (pseudo-ish) mã:

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... 

những gì tôi có thể sử dụng (về plt.gca(), vả vv ...) để xác định xem tôi cần phải tái cốt truyện? Có trạng thái nào đó mà tôi có thể kiểm tra không?

Rất cám ơn,

David

+0

Hãy nghĩ rằng nó cần rõ ràng hơn trong câu hỏi. Bạn có theo dõi số liệu họ đã mở không? Có thể có nhiều hình cùng một lúc hay chỉ một hình mở? –

Trả lời

12

Trong bối cảnh đó là câu trả lời unutbu, bạn cũng có thể kiểm tra xem một con số nhất định được vẫn mở với

import matplotlib.pyplot as plt 

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

Số con số một con số là trong fig.number.

PS: Lưu ý rằng "số" trong figure(num=…) thực sự có thể là một chuỗi: nó được hiển thị trong tiêu đề cửa sổ. Tuy nhiên, con số vẫn có thuộc tính number là số: chuỗi gốc num giá trị không thể được sử dụng với fignum_exists().

PPS: Điều đó nói rằng, subplots(…, num=<string num>) phục hồi chính xác hình hiện tại với số chuỗi đã cho nhất định. Do đó, các số liệu vẫn được biết bằng số chuỗi của chúng trong một số phần của Matplotlib (nhưng fignum_exists() không sử dụng các chuỗi như vậy).

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

'matplotlib.pyplot.get_fignums()' thực hiện gần giống như vậy mà không cần nhập thêm. – Avaris

+0

@Avaris: Cảm ơn, điều đó tốt hơn. – unutbu

Các vấn đề liên quan