Python 如何在不打开GUI的情况下调用plt.subplot()?

Python 如何在不打开GUI的情况下调用plt.subplot()?,python,matplotlib,Python,Matplotlib,我想运行一个深度学习培训,在内部使用matplotlib创建图形,然后使用创建的图形并将其作为图像转储到磁盘 卸料部分是使用tensorboardX为我完成的,该部分工作正常 问题是: plt.subplot(4,1)打开一个窗口,这会减慢我的程序,特别是当不是所有图形都在请求时关闭时 我想要没有GUI的相同功能: 创建子地块 密谋他们 有一个图形对象和绘图(并没有显示在屏幕上),并做任何我想用它 示例代码(在pytorch lightning中)仅用于上下文,我不希望任何人复制它,因为问

我想运行一个深度学习培训,在内部使用matplotlib创建图形,然后使用创建的图形并将其作为图像转储到磁盘

卸料部分是使用
tensorboardX
为我完成的,该部分工作正常

问题是:

plt.subplot(4,1)
打开一个窗口,这会减慢我的程序,特别是当不是所有图形都在请求时关闭时

我想要没有GUI的相同功能:

  • 创建子地块
  • 密谋他们
  • 有一个图形对象和绘图(并没有显示在屏幕上),并做任何我想用它

示例代码(在pytorch lightning中)仅用于上下文,我不希望任何人复制它,因为问题很清楚

tb = self.logger.experiment
fig, axs = plt.subplots(n_plots, 1)
    for sample_idx in range(n_plots):
        for feature_idx, (orig_feature, recon_feature) in enumerate(zip(orig_batch_view[sample_idx + first_sample_idx, :, :], recon_batch_view[sample_idx + first_sample_idx, :, :])):
            i = feature_idx
            if i > 0: continue  # or scale issues don't allow informative plotting                     

                axs[sample_idx].plot(orig_feature.detach().cpu().numpy(), label=f'orig{i}, sample{sample_idx}')
                axs[sample_idx].plot(recon_feature.detach().cpu().numpy(), label=f'recon{i}, sample{sample_idx}')
          
                axs[sample_idx].legend(loc='upper left')
    tb.add_figure(f"{mode}recon_vs_orig", fig, global_step=self.current_epoch, close=True)


可以吗?

受@Mr.T的启发,我进行了更多的研究,得到了一个具有不同语法的类似解决方案

matplotlib.use('Agg')  # turn off gui
fig, axs = plt.subplots(n_plots, 1)
...
matplotlib.use('QT4Agg')  # turn on gui

@T先生好的,怎么做?这会给我留下一个图形对象来处理吗?要切换后端,请添加
plt。在导入
import matplotlib.pyplot作为plt
之后,切换后端('agg')
,忘记我的建议,Gulzar。我只是试了一下;这并不像我想的那样有效。然而,查看您的代码,不清楚为什么要打开一个窗口。plt.subplot()本身不会启动渲染器来创建输出窗口。您是否已打开交互模式,并且在其他地方,plt.show()命令生效?或者你在像Jupyter这样的环境中工作,为你做这件事?如果是这样,这应该在问题中提到并相应地标记。因为我启动了它:您可以使用
my\u backend=matplotlib.get\u backend()
检查并存储当前后端。如何切换已经解释过了。我认为matplotlib会自动打开图形,即使没有调用plt.show()。谢谢你的提问和回答,帮了我很大的忙!