【问题标题】:Python Saving PNG in Terminal vs IPython NotebookPython在终端中保存PNG与IPython Notebook
【发布时间】:2016-03-28 20:49:42
【问题描述】:
我正在编写一个基本的 Python 模块,其中包含一个绘制来自 Pandas DataFrame 的一些数据的函数。问题是我希望用户从 both 交互式 shell 和 IPython 笔记本中调用此函数。不幸的是,我们的交互式 shell 环境没有任何有效的 DISPLAY 选项可供 matplotlib 使用,所以我希望我的函数(或完整模块)的行为根据它加载到的环境略有不同。 (例如,默认在 IPython 中显示绘图而不保存,在 shell 中保存绘图而不显示)。
This question 给了我一个部分答案,因为我可以明确告诉用户在他们导入我的模块之前写matplotlib.use('Agg'),但肯定有更自动化的后端方式来处理这个问题?
【问题讨论】:
标签:
python
python-3.x
matplotlib
【解决方案1】:
您可以尝试检查您是否遇到这种情况(空的$DISPLAY)和默认用户到Agg 后端,而不是要求他们这样做。
def configure_matplotlib():
import os
if 'DISPLAY' not in os.environ:
if matplotlib.get_backend() != 'Agg':
matplotlib.use('Agg')
import matplotlib
configure_matplotlib()
import matplotlib.pyplot as plt
...
现在matplotlib.use 在导入pyplot 后无效,但如果您的用户已经这样做了,他们可能仍然有一个有效的配置。