gpt4 book ai didi

python - 如何在 matplotlib/Python 中更改后端

转载 作者:IT老高 更新时间:2023-10-28 21:40:56 26 4
gpt4 key购买 nike

我正在努力解决以下问题。我需要生成包含一组图表的报告。所有这些图表,除了一个,都是使用 Matplotlib 默认后端(TkAgg)制作的。需要使用 Cairo 后端制作一个图表,原因是我正在绘制一个 igraph 图,并且只能使用 Cairo 绘制。

问题是我无法即时更改后端,例如以下内容不起作用:
matplotlib.pyplot.switch_backend('cairo.png')(我知道 switch_backend 功能是实验性的)

我也尝试过 matplotlib.use("cairo.png") 但这会导致导入问题,因为 matplotlib.use("cairo.png")声明应该在导入 matplotlib.pyplot 之前出现。但在脚本的整个生命周期中,我需要两个不同的后端。

所以我的问题是有人有一个代码片段显示如何在 Matplotlib 中切换后端?

非常感谢!

更新:我写了一个片段,加载 matplotlib,显示默认后端,卸载 matplotlib,重新加载它并更改后端:

import matplotlib
import matplotlib.pyplot as plt
import sys
print matplotlib.pyplot.get_backend()

modules = []
for module in sys.modules:
if module.startswith('matplotlib'):
modules.append(module)

for module in modules:
sys.modules.pop(module)

import matplotlib
matplotlib.use("cairo.png")
import matplotlib.pyplot as plt

print matplotlib.pyplot.get_backend()

但这真的是这样做的方法吗?

更新 2:我昨天有严重的大脑卡住...简单且最明显的解决方案是对所有图表使用 Cairo 后端,并且根本不切换后端 :)

更新 3:实际上,这仍然是一个问题,所以任何知道如何动态切换 matplotlib 后端的人......请发布您的答案。

最佳答案

六年后,我在尝试决定可以使用哪个 backend 时遇到了类似的问题。
注意见注意事项 - 下面

这个代码片段对我很有效:

import matplotlib
gui_env = ['TKAgg','GTKAgg','Qt4Agg','WXAgg']
for gui in gui_env:
try:
print("testing", gui)
matplotlib.use(gui,warn=False, force=True)
from matplotlib import pyplot as plt
break
except:
continue
print("Using:",matplotlib.get_backend())

Using: GTKAgg

你可以推断,交换 backend 就像在强制新的 backend 后重新导入 matplotlib.pyplot 一样简单

matplotlib.use('WXAgg',warn=False, force=True)
from matplotlib import pyplot as plt
print("Switched to:",matplotlib.get_backend())

Switched to: WXAgg

对于那些仍然有问题的人,此代码将打印出:
Non Gui 后端列表;
Gui后端列表;
然后尝试使用每个 Gui 后端来查看它是否存在并正常运行。

import matplotlib
gui_env = [i for i in matplotlib.rcsetup.interactive_bk]
non_gui_backends = matplotlib.rcsetup.non_interactive_bk
print ("Non Gui backends are:", non_gui_backends)
print ("Gui backends I will test for", gui_env)
for gui in gui_env:
print ("testing", gui)
try:
matplotlib.use(gui,warn=False, force=True)
from matplotlib import pyplot as plt
print (" ",gui, "Is Available")
plt.plot([1.5,2.0,2.5])
fig = plt.gcf()
fig.suptitle(gui)
plt.show()
print ("Using ..... ",matplotlib.get_backend())
except:
print (" ",gui, "Not found")

注意事项:matplotlib 自 3.3.0 版以来的变化

  • matplotlib.use 的第一个参数已从 arg 重命名为后端(仅当您通过关键字传递时才相关)。
  • matplotlib.use 的参数 warn 已被移除。切换失败如果设置了 force,后端现在将始终引发 ImportError;捕获如有必要,该错误。
  • matplotlib.use 的所有参数除了第一个参数现在都是关键字。

关于python - 如何在 matplotlib/Python 中更改后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3285193/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com