当前位置: 首页 > 面试题库 >

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

慕容宏邈
2023-03-14
问题内容

我在脚本中生成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?


问题答案:

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

>>> import os
>>> os.environ["DISPLAY"]
':0.0'


 类似资料:
  • 当我们发出以下命令时,Firebase tools会自动检测可用功能并进行部署 但是,我们希望使用gcloud cli,因为它在提供环境变量/指定vpc连接器方面有更多控制。 不幸的是,当使用gCloud函数部署时,我们需要为每个函数指定函数名称。 是否可以从源代码中自动获取http函数/触发器列表? 更新:由于gcloud cli需要函数的类型(http/event),如何自动找到导出函数的类型

  • 问题内容: 我正在尝试为一些数据生成热图,我的代码如下所示: 它生成图像 我也想在网格内显示值。有什么办法吗? 问题答案: 当然,只需执行以下操作: 但是,标签很难看到,因此您可能需要在它们周围放置一个框: 另外,在许多情况下,这样做更为有用。它在放置文本方面更加灵活,但也更加复杂。在这里看看示例:http : //matplotlib.org/users/annotations_guide.ht

  • 如何使用OOAPI使用寄生虫轴(嵌入PyQt4中的图),我完全被难住了。我想根据下面的代码绘制与绘图的轴偏移。但是,在PyQt4中嵌入matplotlib时,不能使用pyplot或host_子Plot。 我确实设法通过创建两个图形来绘制偏移轴,并根据这里的问题链接它们的轴: matplotlib显示一个轴,没有数据 这是我的首选方法,因为它允许我在图形之间放一个QSplitter,但是我不能让上面

  • 问题内容: 同时绘制两个图形时出现了一些麻烦,没有在一个图中显示。但是根据文档,我编写了代码,只有图1所示。我想也许我失去了一些重要的东西。有人可以帮我弄清楚吗?谢谢。(代码中使用的 tlist_first 是数据列表。) 问题答案: 除了在脚本末尾调用之外,还可以分别控制每个图形,分别执行以下操作: 在这种情况下,您必须打电话保持数字有效。这样,您可以动态选择要显示的数字 注意:在Python

  • 问题内容: 我正在尝试使用 matplotlib.pyplot.imshow() 显示灰度图像。我的问题是灰度图像显示为颜色图。我需要灰度,因为我想在图像上绘制颜色。 我读入图像并使用 PIL的Image.open()。convert(“ L”)* 转换为灰度 * 然后,我将图像转换为矩阵,以便可以轻松地使用 但是,当我这样做 它使用颜色图显示图像(即不是灰度)。 我在这里做错了什么? 问题答案:

  • 我正在处理一个包含三个选项卡的应用程序,每个选项卡都有一个与之关联的片段。在某些情况下,我必须在第二个父选项卡中显示子选项卡。但是如果该条件不成立,则子选项卡不应加载,父选项卡应加载我在子选项卡中使用的片段之一。例如,我有三个片段FragmentA、FragmentB和FragmentC。现在,如果条件为真,那么我将显示选项卡并使用片段选项卡主机在FragmentA中加载FragmentB和Fra