2011-09-26 2 views
8

대화 형 모드에서 matplotlib을 사용하여 사용자가 다양한 변수를 입력하는 데 도움이되는 그림을 보여줍니다. 그들은 "?"을 치는 옵션이 있습니다. 이 플롯을 표시하면 변수에 대한 프롬프트가 반복됩니다.matplotlib 대화 형 모드 : 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입니다.

추 신 : figure(num=…)의 "숫자"는 실제로는 문자열 일 수 있습니다. 이는 창 제목에 표시됩니다. 그러나 수치에는 여전히 숫자 인 number 특성이 있습니다. 원래 문자열 num 값은 fignum_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