我在脚本中生成matplotlib图形,无论是否使用图形显示,都可以运行该脚本。我希望脚本自动调整:在显示的情况下,它应该以交互方式显示图形,而在没有显示的情况下,应将它们保存到文件中。
从对在不运行X服务器的情况下生成matplotlib图的问题的回答中,我了解到可以使用Agg后端进行非交互式绘图。
所以我正在尝试这段代码:
import matplotlib try: import matplotlib.pyplot as plt fig = plt.figure() havedisplay = True except: matplotlib.use("Agg") import matplotlib.pyplot as plt fig = plt.figure() havedisplay = False # do the plotting if havedisplay: plt.show() else: fig.savefig("myfig.png")
与带显示器的情况相同。但是,没有显示,matplotlib.use由于已选择显示,因此对的调用无效。显然,我应该在致电matplotlib.use之前importmatplotlib.pyplot,但之后我不知道如何测试显示器是否可用。
matplotlib.use
importmatplotlib.pyplot
我也尝试使用实验性功能matplotlib.switch_backend代替matplotlib.use,但这会生成RuntimeError。
matplotlib.switch_backend
有人对如何使上述代码按预期工作有任何想法,或者可以建议一种替代方法来检测显示是否可用于matplotlib?
您可以直接检测是否使用python的OS模块进行显示。就我而言
>>> import os >>> os.environ["DISPLAY"] ':0.0'