一尘不染

使用matplotlib自动检测显示的可用性

linux

我在脚本中生成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.switch_backend代替matplotlib.use,但这会生成RuntimeError。

有人对如何使上述代码按预期工作有任何想法,或者可以建议一种替代方法来检测显示是否可用于matplotlib?


阅读 288

收藏
2020-06-07

共1个答案

一尘不染

您可以直接检测是否使用python的OS模块进行显示。就我而言

>>> import os
>>> os.environ["DISPLAY"]
':0.0'
2020-06-07