matplotlib交互模式:判断图形窗口是否仍然显示
我在用matplotlib这个库的互动模式来给用户展示一个图,这个图可以帮助他们输入一系列变量。用户可以选择按“?”来显示这个图,然后变量的输入提示会再次出现。
我怎么知道如果这个图还在显示,就不需要重新绘制它呢?
表面上,我有一段笨拙的(伪代码)代码:
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()、fig等)来判断是否需要重新绘制图呢?有没有什么状态可以检查一下?
非常感谢,
大卫
2 个回答
24
在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后把它放到另一个地方。这就像把水从一个杯子倒到另一个杯子一样。
有些时候,我们会遇到一些问题,比如数据的格式不对,或者我们需要对数据进行一些处理才能使用。这就像是你想喝水,但杯子里有一些杂质,你需要先把杂质过滤掉。
在这些情况下,我们可以使用一些工具或者方法来帮助我们解决问题。就像在厨房里,我们有刀、锅、碗等工具来帮助我们做饭一样。
总之,编程就是通过写代码来处理数据,解决问题,让计算机按照我们的想法去做事情。
import matplotlib.pyplot as plt
if plt.get_fignums():
# window(s) open
else:
# no windows
38
和unutbu的回答类似,你也可以用下面的方式检查一个图形是否还在打开状态:
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()
(根据Mark H在评论中的说法,从2015年开始就可以这样做)。
另外,subplots(…, num=<string num>)
可以正确地找到已经存在的图形,前提是你给它提供了正确的字符串编号。因此,在Matplotlib的某些部分,图形仍然是通过它们的字符串编号来识别的。