我正在编写一个基本的Python模块,其中包含一个从Pandas DataFrame中绘制一些数据的函数。问题是我希望用户从两个交互式shell 和 IPython笔记本中调用此函数。不幸的是,我们的交互式shell环境没有matplotlib使用的任何有效的DISPLAY选项,所以我希望我的函数(或完整模块)的行为略有不同,具体取决于它加载到哪个环境。 (例如,默认情况下显示未在IPython中保存的图,并保存图而不在shell中显示)。
This question给了我一个部分答案,因为我可以明确告诉用户在导入我的模块之前编写matplotlib.use('Agg')
,但是肯定有更自动化的后端方法来处理这个问题吗?
答案 0 :(得分: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
后无效,但如果您的用户已经这样做了,他们可能仍然有工作配置。